Python急速入门——(第三章:Python中的运算)
1.input函数的使用
1.input函数介绍:
1)作用:接受用户输入的数据。
2)返回值类型:输入值的类型为str
,返回值类型也是str
。
3)值的存储:使用=
对输入的值进行赋值。
2.例:
# 输入函数input函数
present = input('大圣想要什么礼物呢?')
print(present, type(present))
输入:
3.练习:
1)错误写法:
# 练习
# 从键盘上输入两个数,计算它们的和
# 错误写法
a = input('输入第一个数:')
b = input('输入第二个数:')
print(type(a), type(b))
print(a + b)
输出:
这里两个对象的类型都是str
,这里的+
就起到了一个字符串的连接作用,而不是数学运算中的加法。
2)正确写法:
# 正确写法
# 使用类型转换,将str转成int
a = int(input('输入第一个数:'))
b = int(input('输入第二个数:'))
print(type(a), type(b))
print(a + b)
输出:
2.运算符
2.1算术运算符
1.标准算术运算符:
- 加(+)、减(-)、乘(*)、除(/)、整除(//)
# 标准算数运算符
print(1 + 1) # 加法运算
print(1 - 2) # 减法运算
print(2 * 4) # 乘法运算
print(1 / 2) # 除法运算
print(11 / 2) # 除法运算
print(11 // 2) # 整除运算
输出:
2
-1
8
0.5
5.5
5
2.取模运算:%
# 取模运算
print(11 % 2)
print(10.5 % 2) # 可以对浮点数进行取模运算
输出:
1
0.5
3.幂运算符:**
# 幂运算符
print(2 ** 3) # 2的3次方 2*2*2
输出:
8
4.一正一负,进行整除和取模的情况:
1)整除:
# 一正一负,进行整除和取模的情况
# 整除
print(9 // -4) # -3
print(-9 // 4) # -3
# 原则:向下取整数
输出:
-3
-3
9/-4和-4/9的结果都是-2.2多,向下取整就是-3。
2)取模:
# 取模:
print(9 % -4) # -3
print(-9 % 4) # 3
# 遵循公式:余数=被除数-除数*商
输出:
-3
3
对于第一个式子,有:余数=9-(-4)*(-3)=9-12=-3
对于第二个式子,有:余数=(-9)-4*(-3)=-9+12=3
2.2赋值运算符
1.特点:
- 执行顺序:右到左
- 支持链式赋值:
a=b=c=20
- 支持参数赋值:
+=
、-=
、/=
、//=
、%=
- 支持系列解包赋值:
a,b,c=20,30,40
2.例:
1)链式赋值:
# 运算顺序从右到左
i = 1 + 3
print(i)
# 链式赋值
a = b = c = 20
print(a, id(a))
print(b, id(b))
print(c, id(c))
# 这三个变量的值相同,id也相同
输出:
4
20 140722231891336
20 140722231891336
20 140722231891336
链式赋值实际上只有一个整数对象,有多个引用。
2)参数赋值:
print('-------------支持参数赋值-------------')
# 和C语言中的运算是一样的,这里就不再过多描述了
a = 20
a += 10 # a=a+10 a=30
print(a)
a -= 5 # a=a-5 a=25
print(a)
a *= 4 # a=a*4 100
print(a, type(a))
a /= 3 # 33.333333
print(a, type(a)) # 类型改变
a //= 10 # 3
print(a, type(a)) # 变不回int类型
a %= 2
print(a, type(a))
输出:
-------------支持参数赋值-------------
30
25
100 <class 'int'>
33.333333333333336 <class 'float'>
3.0 <class 'float'>
1.0 <class 'float'>
3)解包赋值:
print('-------------解包赋值-------------')
a, b, c = 10, 20, 30.0
# 把10给a 20给b 30.0给c 左右对象和变量对应,且数量要相等
print(a, b, c)
输出:
-------------解包赋值-------------
10 20 30.0
应用:
# 用解包赋值交换两个变量的值
a = 10
b = 20
print('交换前:a =', a, 'b =', b)
a, b = b, a # C语言要三行代码,而Python只需要一行
print('交换后:a =', a, 'b =', b)
输出:
交换前:a = 10 b = 20
交换后:a = 20 b = 10
2.3比较运算符
1.两种比较:
>
,<
,>=
,<=
,!=
,==
:对象value的比较
is
,is not
: 对象id的比较
2.值比较:
# 比较运算符的运算结果为布尔类型
a, b = 1, 2
print('a>b?', a > b) # False
print('a<b?', a < b) # True
print('a>=b?', a >= b) # False
print('a<=b?', a <= b) # True
print('a==b?', a == b) # False
print('a!=b?', a != b) # True
输出:
a>b? False
a<b? True
a>=b? False
a<=b? True
a==b? False
a!=b? True
3.id比较:
"""==比较的是对象的值
比较对象的标识用is"""
a = 10
b = 10
print(a == b) # True 说明a与b的值相等
print(a is b) # True 说明a与b的id相等
# 以下代码后期讲解
list1 = [11, 22, 33, 44]
list2 = [11, 22, 33, 44]
print(list1 == list2) # value相同
print(list1 is list2) # id不同
print(id(list1))
print(id(list2))
print(list1 is not list2)
输出:
True
True
True
False
1830955275840
1830955349760
True
4.补充:
字符类型的数据只能和字符类型数据进行值的比较,而其他类型的数据,int
,float
,bool
类型的数据都可以相互之间进行值的比较。
例:
- str类型数据不能和其他数据进行值的比较。
a, b = True, 'a'
print(a > b)
- str类型数据之间可以进行值的比较。
a, b = 'b', 'a'
print(a > b)
输出:
True
- 其他类型数据之间可以进行值的比较。
# 其他数据之间可以任意进行值的比较
a, b = 2.0, True
print(a > b)
输出:
True
2.4布尔运算符
1.and
# and 并且
a, b = 1, 2
print('-------------and 并且----------------')
print(a == 1 and b == 2) # True and True --> True
print(a == 1 and b < 2) # True and False --> False
print(a > 1 and b == 2) # False and True --> False
print(a != 1 and b != 2) # False and False --> False
# 只有and两边都为True时,整个表达式的结果才是True
输出:
-------------and 并且----------------
True
False
False
False
2.or
# or 或者
print('-------------or 或者----------------')
print(a == 1 or b == 2) # True and True --> True
print(a == 1 or b < 2) # True and False --> True
print(a > 1 or b == 2) # False and True --> True
print(a != 1 or b != 2) # False and False --> False
# 只要or两边有一个结果是True,整个表达式的结果就是True
输出:
-------------or 或者----------------
True
True
True
False
3.逻辑取反 not
# in 和 not in
print('-------------in 和 not in----------------')
# 判断一个字符串在另一个字符串中是否存在
s = 'hello world'
print('world' in s)
print('k' in s)
print('world' not in s)
print('k' not in s)
输出:
# in 和 not in
print('-------------in 和 not in----------------')
# 判断一个字符串在另一个字符串中是否存在
s = 'hello world'
print('world' in s)
print('k' in s)
print('world' not in s)
print('k' not in s)
输出:
-------------in 和 not in----------------
True
False
False
True
2.5位运算符
1.按位与和按位或:(这里的数位说的都是二进制)
1)按位与&
:对应数位都是1,结果才是1,否则为0。
2)按位或|
:对应数位都是0,结果数位才是0,否则为1。
图例:(一个整型有4个字节,32个比特位,也就是32个格子,这里只写八个,明白意思即可)
程序:
# 按位与 & 按位或 |
print(4 & 8) # 同为1时,结果才为1
print(4 | 8) # 同为0时,结果才为0
输出:
0
12
2.左移位运算符<<
:
高位溢出舍弃,低位补0。
图例:
程序:
# 左移操作符 >>
print(4 << 1) # 向左移动一位(一个位置)
print(4 << 2) # 向左移动两位(两个位置)
输出:
8
16
3.右移位运算操作符>>
:
低位溢出舍弃,高位补0。
图例:
程序:
# 右移操作符 >>
print(4 >> 1) # 向右移动一位(一个位置)
print(4 >> 2) # 向右移动两位(两个位置)
输出:
2
1
4.注意:
有些同学可能认为,右移操作符一次移动一位,就像除以2似得。实则不然,当最低位是1时,也就是说被移位的数是奇数时,位操作符将不具有严格的除法规律。
# 位运算,并没有严格的除法规律
print(5 >> 1)
输出:
2
2.6运算符的优先级
图例:
满足两个规律:
1)数值运算>位运算>比较运算>逻辑运算>赋值运算。
2)有括号先算括号。