运算符

以下表格是按照运算符的优先级从上到下列出的。所谓优先级,就是在同一个运算的表达式中,如果出现了多个运算符,应该先执行哪个运算再执行哪个运算的顺序。在实际开发中,如果搞不懂就使用圆括号来确保运算的执行顺序。

运算符 描述
[] [:] 下标、切片
** 指数
~ + - 按位取反、正、负
* / % // 乘、处、模、整除
+ - 加、减
>> << 右移、左移
& 按位与
^ 、 | 按位异或、按位或
< = < > > = 小于等于、小于、大于、大于等于
= = ! = 等于、不等于
is is not 身份运算符
in not in 成员运算符
not or and 逻辑运算符
= += -= *= /= %= //= **= &= (复合)赋值运算符

算术运算符

加减乘除,整除,求模(求余数),求幂,

1
2
3
4
5
6
7
8
print(321 + 123)     # 加法运算     444
print(321 - 123)     # 减法运算     198
print(321 * 123)     # 乘法运算     39483
print(321 / 123)     # 除法运算     2.6097560975609757
print(321 % 123)     # 求模运算     75
print(321 // 123)    # 整除运算     2
print(2 ** 10)       # 求幂运算     1024
# 321/123=2...75
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
"""
使用input()函数获取键盘输入(字符串)
使用int()函数将输入的字符串转换成整数
使用print()函数输出带占位符的字符串
"""
a = int(input('a = '))
b = int(input('b = '))
print('%d + %d = %d' % (a, b, a + b))
print('%d - %d = %d' % (a, b, a - b))
print('%d * %d = %d' % (a, b, a * b))
print('%d / %d = %f' % (a, b, a / b))
print('%d // %d = %d' % (a, b, a // b))
print('%d %% %d = %d' % (a, b, a % b))
print('%d ** %d = %d' % (a, b, a ** b))

说明:上面的print函数中输出的字符串使用了占位符语法,其中%d是整数的占位符,%f是小数的占位符,%%表示百分号(打印的时候!因为百分号代表了占位符,所以带占位符的字符串中要表示百分号必须写成%%),字符串之后的%后面跟的变量值会替换掉占位符然后输出到终端中。

赋值运算符

赋值运算符的作用是将右边的值赋给左边的变量。

1
2
3
4
5
a = 10
b = 3
a += b        # 相当于:a = a + b
a *= a + 2    # 相当于:a = a * (a + 2)
print(a)      # 195

比较运算符和逻辑运算符

比较运算符有地方也叫关系运算符,包括< = < > > = = = ! =,比较运算符会产生布尔值,要么是True要么是False

逻辑运算符有三个,分别是not or and

and:(而且)连接两个布尔值,如果两个值都是True,那么运算结果就是True。如果有一个值是False,结果为False。如果and左边的值为False,不管右边的值是什么,结果都是False,所以在做运算的时候右边的值会被跳过(短路处理),即右边的表达式根本不会执行

or:(或者)连接两个布尔值,如果两个值有任意一个True,结果就是True。当然or也有短路功能,左边为True时,右边不会执行。

not:(否)后面跟上一个布尔值,作用是得到与该布尔值相反的值,也就是说not True = False,not False = True。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
flag0 = 1 == 1
flag1 = 3 > 2
flag2 = 2 < 1
flag3 = flag1 and flag2
flag4 = flag1 or flag2
flag5 = not (1 != 2)
print('flag0 =', flag0)    # flag0 = True
print('flag1 =', flag1)    # flag1 = True
print('flag2 =', flag2)    # flag2 = False
print('flag3 =', flag3)    # flag3 = False
print('flag4 =', flag4)    # flag4 = True
print('flag5 =', flag5)    # flag5 = False
print(flag1 is True)	   # True
print(flag2 is not False)  # False

比较运算符的优先级高于赋值运算符,所以flag0 = 1 == 1先做1==1产生布尔值True,然后再讲这个值赋值给变量flag0。

isis not表示判断。flag1 is True即是判断flag1的值是True,是真是假,真即为True;同样 flag2 is not False,即判断flag2是True是真是假,假即为False。

print函数可以输出多个值,多个值之间可以用进行分隔,输出的内容之间默认以空格分开。

运算符的例题

例1:华氏温度转化为摄氏温度

华氏温度到摄氏温度的转换公式为:C=(F-32)/1.8

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
f = float(input('请输入华氏温度: '))
c = (f - 32) / 1.8
print('%.1f华氏度 = %.1f摄氏度' % (f, c))

print(f'{f:.1f}华氏度 = {c:.1f}摄氏度') # print(f'')

"""
请输入华氏温度: 2
2.0华氏度 = -16.7摄氏度
"""

输出格式化

说明:在使用print函数输出的时候,也可以对字符串内容进行格式化处理,print('%f'%(a))上面的print函数中的字符串%.1f是一个占位符,稍后会由一个float类型的变量值来替换掉它,并且小数点后保留1位有效数字。同理,如果字符串中有%d,后面会由一个int类型的变量值来替换。而%s会被字符串的值替换。字符串之后的%后面跟的变量值会替换掉占位符然后输出到终端中。

print(f'{a}')字符串前面加f表示格式化字符串,加f后可以在字符串里面使用用花括号括起来的变量和表达式,如果字符串里面没有表达式,那么前面加不加f输出应该都一样。其中{f:.1f}{c:.1f}可以先看成是{f}{c},表示输出时会用变量f和变量c的值替换掉这两个占位符。后面的:.1f表示这是一个浮点数,小数点后保留1位有效数字。

例2:输入圆的半径计算计算周长和面积

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
radius = float(input('请输入圆的半径: '))
perimeter = 2 * 3.1416 * radius
area = 3.1416 * radius * radius
print('周长: %.2f' % perimeter)
print('面积: %.2f' % area)

"""
请输入圆的半径: 1
周长: 6.28
面积: 3.14
"""

例3:输入年份判断是不是闰年

闰年:能被400整除。或者能被4整除但不能被100整除。

1
2
3
4
5
6
7
8
year = int(input('请输入年份: '))
is_leap = year % 4 == 0 and year % 100 != 0 or year % 400 == 0
print(is_leap)

"""
请输入年份: 2021
False
"""

说明:比较运算符会产生布尔值,而逻辑运算符andor会对这些布尔值进行组合,最终也是得到一个布尔值,闰年输出True,平年输出False

补充

eval():评估函数。去掉参数最外侧引号,并执行余下语句的函数。

eval(tempstr[0:-1]):如果tempstr的值是"12.3",输出的是12.3

1
2
3
4
5
6
7
8
9
TempStr = input("请输入带符号的温度值:")
if TempStr[-1] in ["F","f"]
	C =(eval(TempStr[0:-1]) - 32)/1.8
    print("转化后的温度是{:.2f}C".format(C))
elif TempStr[-1] in ["C","c"]
	 F =1.8*eval(TempStr[0:-1]) + 32
     print("转化后的温度是{:.2f}F".format(F))
else:
    print("输入格式")

Python位操作符