1. 运算符与表达式
在Python编程中,运算符包括算术运算符、赋值运算符、比较运算符、逻辑运算符、身份运算符、成员运算符和位运算符。表达式是由一个或多个常量、变量、函数和运算符组合而成,编程语言可以对其进行解释和计算以得到另一个值。
1.2 算术运算符
Python 中的算术运算符非常丰富,除了加(+)、减(-)、乘()、除(/)之外,还有整除运算符(//)、求模(求余数)运算符(%)和求幂运算符(**);算术运算符主要用于整型和浮点型数据类型的运算。
示例代码:
# 算术运算符a=321b=12print(a + b) # 加法运算,输出333print(a - b) # 减法运算,输出309print(a * b) # 乘法运算,输出3852print(a / b) # 除法运算,输出26.75print(a // b) # 整除运算,输出26print(a % b) # 求模运算,输出9print(a ** b) # 求幂运算,输出1196906950228928915420617322241
算术运算需要先乘除后加减;如果还有求幂运算,求幂运算的优先级是高于乘除法的。如果想改变算术运算的执行顺序,可以使用英文输入法状态下(小括号),写在小括号中的表达式会被优先执行。代码示例:
# 算术运算的优先级print(2 + 3 * 5) # 17print((2 + 3) * 5) # 25print((2 + 3) * 5 ** 2) # 125print(((2 + 3) * 5) ** 2) # 625
1.3 赋值运算符
赋值运算符应该是最为常见的运算符,它的作用是将右边的值赋给左边的变量。赋值运算符还可以跟上面的算术运算符放在一起,组合成复合赋值运算符。如下图:
示例代码:
# 赋值运算符和复合赋值运算符a = 10b = 3a += b # 相当于:a = a + ba *= a + 2 # 相当于:a = a * (a + 2)print(a) # 大家算一下这里会输出什么
1.4 比较运算符
比较运算符也称关系运算符,用于比较两个表达式的大小,其结果是布尔类型的数据 ,即True或False。
示例代码:
# 比较运算符a=1b=2print(a>b) # Falseprint(a<=b) # True
1.5 逻辑运算符
逻辑运算符用于对布尔型变量进行运算,其结果也是布尔型。逻辑运算符有三种:逻辑与(and)、逻辑或(or)、逻辑非(not)。运算关系如下图:
Python语言中,“逻辑与”和“逻辑或”都采用了“短路”设计,所谓的“短路”设计是指“逻辑与”和“逻辑或”在计算过程中,只要结果确定,则不再计算后面的表达式,从而提高了程序的执行效率。如下图:
代码实例:
# 逻辑运算符的使用flag1 = Trueflag2 = Falseprint(flag1 and flag2) # Falseprint(flag1 or flag2) # Trueprint(not flag1) # False
1.6 身份运算符
在 Python 中,身份运算符用于比较两个对象的内存地址是否相同(即判断是否为同一个对象),而不是比较它们的值是否相等。如下图:
示例代码:
# 整数缓存(小整数 -5 到 256 在 CPython 中被预先创建)a = 100b = 100print(a is b) # True(小整数复用对象)c = 1000d = 1000print(c is d) # 可能为 True 或 False(取决于实现细节)# 字符串驻留s1 = "hello"s2 = "hello"print(s1 is s2) # True(字符串字面量可能被复用)# 列表(可变对象)list1 = [1, 2, 3]list2 = [1, 2, 3]print(list1 is list2) # False(不同对象)print(list1 == list2) # True(值相等)
注意点:Python的小整数缓存(-5到256)策略:Python 在启动时会预先创建 -5 到 256 之间的所有整数对象,并保存在内存中。当你创建这个范围内的整数时,Python 直接返回已经存在的对象引用,而不是创建新对象。所以上述代码中,变量a和b,用 is 进行比较时,返回值为:True;变量c和d ,用 is 比较时,给出的结论:可能为 True 或 False(取决于实现细节)。请看在交互式环境中运行的结果:
从运行结果看,变量c和d ,用 is 比较时返回值确实为False,也就是说Python只缓存了-5到256所用整数对象,超过256的整数不存在缓存。
身份运算符主要事项:
- 不要对数字和字符串过度依赖is,因为对象复用行为依赖具体实现
- 比较None、True、False时使用is(Python 官方推荐)
1.7 成员运算符
在Python中,成员运算符比较简单,主要用于检查一个值是否存在于某个序列(如字符串、列表、元组、字典、集合等)中。主要有两个:
检查值是否存在于序列中,存在则返回 True,否则返回 False。
检查值是否不存在于序列中,不存在则返回 True,存在则返回 False。
示例代码:
# 成员运算符的使用fruits = ['apple', 'banana', 'orange']print('apple' in fruits) # Trueprint('grape' in fruits) # Falseprint('grape' not in fruits) # True# 成员运算符在字典中的应用person = {'name': 'Alice', 'age': 30, 'city': 'New York'}# 检查键(默认行为)print('name' in person) # Trueprint('Alice' in person) # False(检查的是键,不是值)print('gender' not in person) # True# 检查值print('Alice' in person.values()) # Trueprint(30 in person.values()) # True
1.7 位运算符
位运算是以二进位(bit)为单位进行运算的,操作数和结果都是整 数类型的数据。如下图:
位运算符主要应用场景:权限系统和状态标志;硬件编程和嵌入式系统;加密算法和哈希函数;性能关键的数值计算;图形学和游戏开发。
示例代码:
# 位运算符的使用a = 0b1010 # 十进制 10b = 0b1100 # 十进制 12# 按位与print(bin(a & b)) # 0b1000 (十进制 8)# 按位或print(bin(a | b)) # 0b1110 (十进制 14)# 按位异或print(bin(a ^ b)) # 0b0110 (十进制 6)# 按位取反print(bin(~a)) # -0b1011 (十进制 -11)# 注意:Python使用无限位数的补码表示# 左移print(bin(a << 1)) # 0b10100 (十进制 20)print(bin(a << 2)) # 0b101000 (十进制 40)# 右移print(bin(a >> 1)) # 0b101 (十进制 5)
1.8 运算符优先级
使用运算符的时候,需要注意运算符的优先级。因此,在创建运算表达式时,小括号的使用是非常重要的,添加或者删除小括号可能会导致表达式的运算结果发生改变。下图为运算符的优先级:
注意事项: 所谓优先级就是在一个运算的表达式中,如果出现了多个运算符,应该先执行什么再执行什么的顺序。编写代码的时候,如果搞不清楚一个表达式中运算符的优先级,可以使用圆括号(小括号)来确保运算的执行顺序。
2. 基本输入和基本输出
2.1 基本输入:input()
语法格式:variable = input(prompt)
prompt 是一个显示在控制台的字符串,提示用户输入数据;用户输入的数据赋值给变量名variable,variable为字符串类型,可以根据需求转换为其他数据类型。如下示例代码:
# 基本用法name = input("请输入你的名字:")# 在控制台输入 壹创客print("您好,我的名字叫{}".format(name)) # 您好,我的名字叫壹创客
# 类型转换age = int(input("请输入年龄:")) # 转换为整数# 转换为浮点数height = float(input("请输入身高(米):"))
2.2 基本输出:print()
语法格式:print([obj1,obj2...][,sep=' '][,end='\n'])
obj1,obj2...,为输出对象;[ ]表示可以省略的参数,即全部都可以省略;sep表示分隔符,即第一个参数"obj1,obj2..."之间的分隔符,默认为空;end表示结尾符,默认为换行符 "\n"。
2.2.1基本用法:
# 基本用法print("Hello World") # Hello Worldprint(123) # 123# 输出变量name = "张三" print(name) # 张三# 用逗号分隔,输出多个内容print("姓名:", "张三", "年龄:", 18) # 输出:姓名: 张三 年龄: 18
2.2.2 格式化输出:
name = "李四"age = 20print(f"姓名:{name},年龄:{age}")# 输出:姓名:李四,年龄:20# 支持表达式print(f"明年年龄:{age + 1}")
print("姓名:{},年龄:{}".format("王五", 25))# 输出:姓名:王五,年龄:25
print("姓名:%s,年龄:%d" % ("赵六", 30))# %s: 字符串, %d: 整数, %f: 浮点数
3. 运算符和表达式应用案例
3.1 华氏温度转摄氏温度
要求:输入华氏温度将其转换为摄氏温度,华氏温度到摄氏温度的转换公式为:C = (F - 32) / 1.8。
# 将华氏温度转换为摄氏温度f = float(input('请输入华氏温度: ')) # float转换为浮点数c = (f - 32) / 1.8print('%.1f华氏度 = %.1f摄氏度' % (f, c))# %.1f 为浮点数占位符,表示保留一位小数。
3.2 计算圆的周长和面积
要求:输入一个圆的半径(),计算出它的周长( )和面积( )。
# 输入半径计算圆的周长和面积radius = float(input('请输入圆的半径: '))perimeter = 2 * 3.1416 * radiusarea = 3.1416 * radius * radiusprint('周长: %.2f' % perimeter)print('面积: %.2f' % area)# %.2f为浮点数占位符,表示保留两位小数。
3.3 判断闰年
要求:输入一个 1582 年以后的年份,判断该年份是不是闰年。
# 输入年份,闰年输出True,平年输出Falseyear = int(input('请输入年份: '))is_leap = year % 4 == 0 and year % 100 != 0 or year % 400 == 0print(f'{is_leap = }')
说明:判断闰年的规则是:1. 公元年份非 4 的倍数是平年;2. 公元年份为 4 的倍数但非 100 的倍数是闰年;3. 公元年份为 400 的倍数是闰年。
总结
通过上面的讲解和案例,相信大家已经感受到了运算符和表达式的力量。实际编程中的很多问题,都需通过构造表达式来解决,所以变量、运算符、表达式对于任何一门编程语言都是极为重要的基础。一定要牢牢掌握,为正式开始我们的项目编程打下坚实的基础。有什么问题请先在评论区留言讨论,我们一起去探讨和学习。祝大家学习愉快!!!