0、链接上一篇文章:python学习之基础知识
不同类型的变量可以进行的运算是不同的,所以必须理解变量的类型,python中数据类型可以分为:
-
-
数值类型:整型int,浮点型float,复数(complex) 3+5j
-
str:字符串
-
bool:布尔值【True,False】
-
None:空值,表示变量没有确定的值
-
list:列表
-
tuple:元组
-
dict:字典
-
set:集合
-
-
自定义类型
-
class :类
-
-
-
整型(int): python3中只有int一种,可以表示整数,例如:10,-5,10000
-
浮点型(float): 表示带小数点的实数,有两种表示法:
-
小数表示: 1.9 .23
-
科学计数法: 用e来表示10的指数,1e2就代表了100,注意e前面必须有数值,e后面必须为整数
-
-
复数(complex):表示数学上的无理数,形如:a+bj
-
-
布尔型(bool):表示事务的两种状态,男女、阴晴、亮暗等,它只有两个值:True,False
-
None:表示空对象,一般用于判断,不同于0和空字符
-
字符串(str):在python中,用引号(单引号、双引号、三引号)表示字符串
-
# 用单引号表示: 'hello'
# 用双引号表示:"我用python"
# 用3个单引号表示:可以表示多行文本,例如:
'''伟大
的
祖国
'''
# 用3个双引号表示:可以表示多行文本,例如:
"""生死看淡,
不服就干"""
转义字符:有些特殊字符无法从键盘输入,可以使用转义字符表示,另外,无论是单引号、双引号还是三引号字符串,其中引号是字符串界定符,引号并不是字符串的内容,那么如何在单引号字符串中表示一个单引号呢,这也可以使用转义字符表示。常见的转义字符
转义字符 | 描述 | 转义字符 | 描述 |
---|---|---|---|
\' |
表示一个普通字符单引号 | \n | 换行 |
\" |
表示一个普通字符双引号 | \r | 回车 |
\''' |
一个普通的三单引号 | \\ |
一个普通的字符\ |
\""" |
一个普通的三双引号 | \a | 响铃 |
\t | tab键 | \b |
字符串编码:计算机只能识别二进制,那么字符串如何存储到计算机里呢
计算机不能直接存储字符串,但我们可以将字符编码,例如用65表示大写字符A,66表示大写字符B....等这种表示方式就是美国类的ASCII码,只能表示127个字符,但对于美国人来说已经足够了。一但能用整数表示字符,我们可以很方便的把整数用二进制表示,那么字符串也就和容易存储到计算机了。
但还有很多其他国家的语言是不能用ASCII表示的,所有ISO组织就推出了unicode码,用来表示任何一种语言的字符,unicode码也称之为万国码,通用码,可以表示任何一种语言的任何一个字符。unicdoe码有多中表示方式,例如:utf-8、utf-16、utf-32等。一般使用较多的是utf-8,utf-8是一种变长的编码,表示一个字符可能用一个字节,也可能是三个字节
中文常用编码一般用GBK编码,用2个字节表示一个汉字
#type用法:
type(obj)
功能:返回obj的数据类型
参数:obj是你要测试变量或数值
示例:
age = 10
name = 'hello'
print(type(name),type(age))
#判断变量是否是指定类型
if type(age) is int:
print('是')
else:
print('否')
#isinstance用法:
isinstance(obj,typename)
功能:判断obj是否是指定类型,是返回True,否返回False
参数: objobj是你要判断的变量或数值
typename是指定数据类型,可以是int,float,str等。也可是一个
类型的元组,例如:(int,float)
示例:
age = 10
name = 'hello'
print(isinstance(age,int))
print(isinstance(name,(str,int)) #只要name是str或int的一种就返回True
if isinstance(age,int):
print('是')
else:
print('否')
#type和isinstance的区别
type判断基本类型是没问题的,但无法判断子类对象是父类的一种
isinstance可以判断子类对象是父类的一种
class A:
pass
class B(A):
pass
objA = A()
objB = B()
#输出否
if type(objB) is A:
print('是')
else:
print('否')
print(isinstance(objB,A)) #True
结论:优先使用isinstance
在数学上为了计算结果,我们会写一些式子计算,例如:
30 + 5
这是数学中的计算式,python中为了计算也有类似的式子,叫表达式。在表达式中30和5称作操作数,+称之运算符。表达式的目的在于计算结果。表达式构成:
-
最基本的表达式就是一些数值,变量、函数,例如: 3, a(变量) print('hello')
-
由基本表达式加上适当的运算符构成复杂的表达式: 3 + a
综合上述,所谓表达式就是由操作数和运算符组成䄦符合python语法的式子。要写表达式首先要学习运算符。关于运算符要知道两件事情
-
计算顺序 : 是从左向右算还是从右向左算
-
优先级 : 比如先乘除后加减
2.1 算术运算符
a = 20
b = 10
说明 | 示例 | |
---|---|---|
- | 负号,取原数的相反数 | a = 10 print(-a) #-10 |
+ - * / | 加减乘除,同数学上一样 | a + b = 30 a - b = 10 a * b = 200 a / b = 2 |
% | 模运算,即求 a整除以b的余数 | a % 10 = 0 |
// | 整除 | a // b = 2 |
** | 对运算符进行指数(幂)计算 |
模运算说明
-
模运算的符号取决于第二个操作数(右操作数)
-
模运算的计算公式:r = a % b = a - n * b,其中n是小于a/b的最大整数
-
整除(//)运算如果有一个操作数是浮点数,结果是浮点数
-
用途:判断奇偶、判断是否能够整除、最大公约数、水仙花数
函数的说明 | 示例 | |
---|---|---|
abs | 取绝对值 | abs(-10) |
pow(x,y) | x的y次方 | pow(10,2)求10的平方 |
round(x,[n]) | 浮点数的4舍5入, n代表保留小数的位数 | round(3.456) |
max() | 求给定参数的最大值 | max(21,43,65,75,86,32,3,45) |
min() | 求给定参数的最小值 | min(21,43,65,75,86,32,3,45) |
math.ceil() | 需要导入import math库 向上取整 | math.ceil(18.1) #19 |
math.floor() | 需要导入import math库 向下取整 | math.floor(18.1) #18 |
math.sqrt | 需要导入import math库 求平方根 |
随机函数
获取随机数,需要引入random库。
import random
函数说明 | |
---|---|
random.randrange(start,stop,step) | start 指定范围的起始值 包含本身,默认是0;stop 指定范围的结束值 不包含本身; step 步长,默认步长是1。该函数返回一个整数 |
random.randint(start,end) | 返回[start end]之间的一个随机整数,start必须小于end |
random.random() |
-
-
从左向右算
-
说明 | 示例 | |
---|---|---|
= | 简单赋值, 将b+c的结果赋给a | a = b +c #a=30 |
+= | a += b等价于 a = a +b | a = 15 |
-= | a -= b等价于 a = a - b | a = -5 |
*= | a *= b等价于 a = a * b | a = 50 |
/= | a /= b 等价于a = a / b | a = 0.5 |
%= | a %= b等价于a = a % b | a = 5 |
//= | a //= b等价于 a = a // b | a = 0 |
**= | a **= b等价于a = a ** b |
注意:
-
赋值运算符左边必须是变量
-
从右向左算
-
没有赋值表达式
-
所有赋值运算符优先级相同,赋值运算符优先级非常低,仅高于成员运算符和身份运算符、逻辑运算符
-
注意在复合赋值中
a = 2
b = 3
a *= b + 2 #等价于 a = a * (b + 2)
print(a) # a = 10
运算符 | 示例 | 说明 |
---|---|---|
== | a == b | a和b值相等,结果是True,a和b值不相等结果为False |
!= | a != b | a不等于b 结果为True,否则结果为True |
> | a > b | a大于b结果为True,否则为False |
>= | a >= b | a大于等于b结果为True,否则为False |
< | a < b | a小于b结果为True,否则为False |
<= | a <= b |
注意:
-
优先级: 比较运算符优先级相同
-
从左向右算
-
可以这样算:
1 < a < 3
等价于 a > 1 and a < 3
逻辑运算符可以用于构造复杂条件。逻辑运算符包括:
-
逻辑与 and 对应汉语的意思是“并且” 、 “同时”
-
逻辑或 or 对应汉语意思为"或者"
-
逻辑非 not 对应汉语意思为”相反“
在逻辑运算中,False、None、0、0.0、‘’(空字符串)被看做假(False),其它的看做真(True)
b | a and b | |
---|---|---|
真 | 任意值 | b的值 |
假 | 任意值 |
表达式 a and b的值为: 如果a为真,结果为b的值,否则结果是a的值
a | b | a or b |
---|---|---|
真 | 任意值 | a的值 |
假 | 任意值 |
表达式a or b的值为:如果a为真结果为a的值,否则结果是b的值
not a | |
---|---|
真 | False |
假 |
小结:a为真则表达式为False,否则表达式为True
is not:判断两个标识符是不是引用自不同的实体【对象】如果两个对象的id不同结果为真,否则为假
id()函数获取实体的id(地址)
注意:is和==的区别
-
is用于判断两个变量引用实体是否为同一个【id】
-
==用于判断两个变量的值是否相同,但id不一定相同
主要应用在序列中
in:如果在指定的序列中找到指定的值,则返回True,否则返回False
not in:如果在指定的序列中未找到指定的值,则返回True,否则返回False
表达式1 if 条件 else 表达式2
如果条件为真假结果是表达式1的值,否则结果是表达式2的值
相关代码
# 位运算
# 二进制: 0 1
'''
1 1
8 4 2 1
'''
a =3
print(bin(a)) # 0b 11
a=13
print(bin(a))
b = 0b10111 # 0b 二进制 二进制的表示: 0b1000101
print(int(b))
c=-8 # -0b1000 0000 1000
print(bin(c))
c= 0o6430 # 0o 开头的都是八进制 里面的数字不能超过8
print(int(c))
# 开头表示0x 0-9 a-f
# 应用: FFFFFF 000000 FF0000 00FF00
d=0x9ab16
print(int(d))
'''
&
|
~
^
<<
>>
'''
print(3 & 2)
'''
类似and
1 True 0 False
0000 0011
& 0000 0010
------------
0000 0010
| 类似or
1 True 0 False
'''
print(5 | 3)
'''
0000 0101
| 0000 0011
--------------
0000 0111
'''
print(~5) # 取反 将十进制的数字对应的二进制进行取反操作。
'''
0000 0101
取反:
1111 1010
-6
1111 1010 减1
1111 1001 取反
0000 0110 6
看第一位(第一位是符号位,只要第一位是1的就是负数,第一位是0的就是整数)
-6:
0000 0110
1111 1001 反码
1111 1010 补码
'''
# 异或 ^ 相同的是0 不同的是1
print(3^5)
'''
# 步骤:
1. 左边的数字转成二进制
2. 右侧的数字转成二进制
3. 对齐,上下进行比较(相同的是0 不同的是1)
4. 将计算的结果转成十进制
3 0000 0011
5 0000 0101
----------------
0000 0110 -----> 6
'''
# 左移:
print(2<<1) # 4
print(2>>1) # 1
'''
2的二进制:
0000 0010
左移: m<<n m*2的n次方
右移: m>>n m//2的n次方
'''
print(16<<2)
print(16>>2)
print(-0b1000000)
print(64<<1)
# n1 = int(input('请输入第一个数:'))
# n2 = int(input('请输入第二个数:'))
# # 判断n1 与 n2
# result = n1 > n2 # 结果False True
# # 8 > 12 --->False
# print('n1>n2:',result)
# result = n1 == n2
# print('n1==n2:',result)
# m1='hello'
# m2='hello'
# result = m1==m2
# print('m1==m2:',result)
# username= input('输入用户名:')
# uname ='admin123'
# # result = username==uname
# result = username != uname # 如果两者不相等则会返回True,相等则返回False
# print('用户名的验证结果是:',result)
# is 用户对象的比较
age = 20
age1 = 20
print(id(age))
print(id(age1))
print(age is age1)
money = 2000000
salary = 2000000
print(id(money))
print(id(salary))
print(money is salary)
# and or not
# and 逻辑与
# or 逻辑或
# not 逻辑非
# 逻辑运算符的运算结果也是返回True False
#
'''
只要有一边为假False,结果就是False
左 右
True and True ----》True 其他情况
True and False --->False
False and True ----》False
False and False ----》False
8>10 and 6<8
False and True ---->False
'admin' == 'admin123' and '123456'=='123456' ---->False
False True
'''
n1= 8
n2 =5
n3=3
result = n1>=(n2+n3) and n1>n2
'''
步骤:
1. n1>=(n2+n3) 8 >= 8 True
2. n1>n2 8>5 True
3. True and True
4. 结果:True
'''
n2=n2+n3
# n2--->8
result = n1>=n2 and n1==n3
# True and False ---->False
n4=(n1+n3)-n2 # n4=3
result = n4<n1 and (n4+n3)>n2 # False
'''
or: 或者
手机号 或者 账户名
只要有一边为真True,结果即为真True
True or True ---->True
True or False ---->True
False or True ---->True
False or False ---->False
'''
# 判断是否存在用户
username = ''
email ='63478364@qq.com'
result = username=='admin123' or email =='63478364@qq.com'
# False or True ---->True
print('or ---->',result)
a=2
b=5
c=7
result = (a+b)!=c or c>a
print('or--222-->:',result)
flag = False
result = not flag # not就是取反
print('not ---->:',result)