三. 运算符(全解)
3.1 算术运算符
# 注意:除法结果总是浮点数,即使能整除
print(10 / 2) # 5.0
# 整除向负无穷取整
print(-5 // 2) # -3 (因为 -2.5 向下取整为 -3)
# 取余公式:a = (a//b)*b + (a%b)
print(-5 % 2) # 1 (很多新手困惑,其实余数非负)
3.2 比较运算符(返回布尔值)
a, b = 5, 7
print(a == b) # False 相等
print(a != b) # True 不等
print(a < b) # True
print(a > b) # False
print(a <= 5) # True
print(b >= 7) # True
# 字符串比较按字典序(Unicode码点)
print("apple" < "banana") # True
print("Zoo" < "apple") # True,因为大写字母 Z 的码点小于 a
3.3 逻辑运算符(and, or, not)
age = 20
has_license = True
# and:两边都为True才返回True
if age >= 18 and has_license:
print("可以开车")
# or:至少一个True即为True
if age < 18 or has_license:
print("可能是年轻人或老司机")
# not:取反
is_student = False
if not is_student:
print("不是学生")
# 短路逻辑:and 左边为False则右边不计算;or 左边为True则右边不计算
def risky():
raise Exception("不会执行")
False and risky() # 安全,risky不会被调用
True or risky() # 安全,risky不会被调用
3.4 赋值运算符与复合赋值
x = 10
x += 5 # 等价 x = x + 5
x -= 3 # x = x - 3
x *= 2
x /= 4 # 注意:除法后变为浮点数
x //= 2
x %= 3
x **= 2
# 海象运算符(Python 3.8+):在表达式中赋值
if (n := len([1, 2, 3])) > 2:
print(f"列表长度 {n} 大于2")
3.5 位运算符(基础了解)
a = 0b1010 # 二进制 10
b = 0b1100 # 二进制 12
print(a & b) # 按位与 0b1000 -> 8
print(a | b) # 按位或 0b1110 -> 14
print(a ^ b) # 按位异或 0b0110 -> 6
print(~a) # 按位取反(无限位) -> -11 (补码)
print(a << 1) # 左移一位 -> 20
print(a >> 1) # 右移一位 -> 5
四. 输入与输出
4.1 基本输入输出
# input() 永远返回字符串
name = input("请输入你的名字:")
print("你好," + name)
# 输入数字需要转换
age_str = input("年龄:")
age = int(age_str) # 可能抛出 ValueError
4.2 格式化输出的三种方式
方法一:% 格式化(旧风格)
name = "小明"
score = 92.5
print("姓名:%s,成绩:%.1f" % (name, score))
方法二:.format() 方法
print("姓名:{},成绩:{:.1f}".format(name, score))
print("成绩:{1:.1f},姓名:{0}".format(name, score)) # 指定位置
方法三:f-string(Python 3.6+,最推荐)
print(f"姓名:{name},成绩:{score:.1f}")
print(f"2 + 3 = {2+3}")
print(f"{name:>10}") # 右对齐,宽度10
4.3 控制 print 的结尾与分隔符
print("A", end="") # 不换行
print("B") # 输出 "AB"
print(1, 2, 3, sep="-") # 1-2-3