上一篇讲了字符串和列表的操作,这篇来聊聊运算符和格式化输出。
运算符是编程的基础,格式化输出能让你的程序输出更专业。今天就把运算符优先级、格式化输出的三种写法、以及input()的类型转换技巧一次性讲透。
一、运算符优先级
1.运算符优先级表
下面这个表格按优先级从高到低排列,数字越小优先级越高:
| 优先级 | 运算符 | 说明 | 示例(x=3, y=2) | 结果 |
|---|---|---|---|---|
| 1 | ** | 幂运算 | x ** y | 9(3的2次方) |
| 2 | * | 乘法 | x * y | 6 |
| 2 | / | 除法(结果是float) | x / y | 1.5 |
| 2 | // | 整除(向下取整) | x // y | 1 |
| 2 | % | 取余数 | x % y | 1 |
| 3 | + | 加法 | x + y | 5 |
| 3 | - | 减法 | x - y | 1 |
除法运算的坑
Python有两种除法,新手容易搞混:
# 普通除法 /(结果永远是float)
print(10 / 2) # 输出:5.0(不是5)
print(7 / 2) # 输出:3.5
# 整除 //(向下取整)
print(10 // 2) # 输出:5
print(7 // 2) # 输出:3(不是3.5)
print(-7 // 2) # 输出:-4(向下取整,不是-3)
# 取余 %
print(7 % 2) # 输出:1(7除以2余1)
print(10 % 3) # 输出:1(10除以3余1)
二、格式化输出
格式化输出能让你的数字显示更专业,比如保留小数位数、对齐文本等。
1. format()函数
format() 函数可以格式化单个数字:
pi = 3.1415926
# 保留2位小数
result = format(pi, ".2f")
print(result) # 输出:3.14
# 保留4位小数
result = format(pi, ".4f")
print(result) # 输出:3.1416(注意会四舍五入)
# 保留0位小数
result = format(pi, ".0f")
print(result) # 输出:3
格式说明:
.2f表示保留2位小数.4f表示保留4位小数f表示浮点数格式
2. f-string格式化(推荐)
f-string是Python 3.6+的新特性,写起来最简洁:
pi = 3.1415926
name = "圆周率"
# 方法一:先用format()格式化,再放入f-string
formatted = format(pi, ".4f")
print(f"{name}的值是: {formatted}")
# 输出:圆周率的值是: 3.1416
# 方法二:直接在f-string里格式化(更推荐)
print(f"{name}的值是: {pi:.4f}")
# 输出:圆周率的值是: 3.1416
方法二更简洁,一步到位,不需要额外变量。
3. 三种写法对比
price = 19.8
# 写法一:format()函数
formatted_price = format(price, ".2f")
print("价格:" + formatted_price + "元")
# 写法二:f-string + format()
formatted_price = format(price, ".2f")
print(f"价格:{formatted_price}元")
# 写法三:f-string直接格式化(最推荐)
print(f"价格:{price:.2f}元")
# 三种写法输出都是:价格:19.80元
推荐度:写法三 > 写法二 > 写法一
4. 更多格式化技巧
num = 1234.5678
# 保留不同小数位
print(f"{num:.1f}") # 输出:1234.6
print(f"{num:.3f}") # 输出:1234.568
# 千位分隔符
print(f"{num:,.2f}") # 输出:1,234.57
# 百分比格式
ratio = 0.856
print(f"{ratio:.1%}") # 输出:85.6%
# 对齐和填充
name = "Python"
print(f"{name:>10}") # 输出: Python(右对齐,总宽度10)
print(f"{name:<10}") # 输出:Python (左对齐)
print(f"{name:^10}") # 输出: Python (居中)
print(f"{name:*^10}") # 输出:**Python**(居中,用*填充)
三、input()与类型转换
1. input()的本质
input() 函数返回的永远是字符串,即使用户输入的是数字:
age = input("请输入你的年龄:")
print(type(age)) # <class 'str'>
# 如果直接计算会报错
# next_year = age + 1 # ❌ 报错:字符串不能和整数相加
2. 类型转换的三种写法
假设我们要获取用户输入的身高(浮点数):
写法一:分两步
h = input("请输入你的身高(米):")
h = float(h)
print(f"你的身高是{h}米")
写法二:一步到位(推荐)
h = float(input("请输入你的身高(米):"))
print(f"你的身高是{h}米")
写法二更简洁,一行代码搞定输入和转换。
四、常见错误与解决
1. 忘记类型转换
age = input("请输入年龄:")
next_year = age + 1 # ❌ 报错:字符串不能和整数相加
解决
age = int(input("请输入年龄:"))
next_year = age + 1 # ✅ 正确
2. 转换失败
num = int(input("请输入数字:"))
# 如果用户输入"abc",会报错:ValueError
解决:加上异常处理(后续会讲):
try:
num = int(input("请输入数字:"))
except ValueError:
print("输入无效,请输入数字")
3. 格式化语法错误
pi = 3.14
print(f"{pi:.2}") # ❌ 缺少f,应该是.2f
解决:
print(f"{pi:.2f}") # ✅ 正确
4. 运算符优先级搞错
result = 10 + 5 * 2
print(result) # 输出:20,不是30
解决:用括号明确优先级:
result = (10 + 5) * 2
print(result) # 输出:30
五、进阶技巧
1. 链式比较
Python支持数学风格的链式比较:
x = 5
# 传统写法
if x > 0 and x < 10:
print("x在0到10之间")
# Python风格(更简洁)
if 0 < x < 10:
print("x在0到10之间")
2. 多变量输入
一次性输入多个值:
# 用空格分隔输入
data = input("请输入姓名和年龄(空格分隔):").split()
name = data[0]
age = int(data[1])
# 更简洁的写法
name, age = input("请输入姓名和年龄(空格分隔):").split()
age = int(age)
print(f"{name}今年{age}岁")
3. 格式化对齐表格
# 打印成绩表
print(f"{'姓名':<6}{'语文':>6}{'数学':>6}{'英语':>6}")
print("-" * 30)
print(f"{'张三':<6}{95:>6}{87:>6}{92:>6}")
print(f"{'李四':<6}{88:>6}{90:>6}{85:>6}")
print(f"{'王五':<6}{92:>6}{88:>6}{90:>6}")
# 输出:
# 姓名 语文 数学 英语
# ------------------------------
# 张三 95 87 92
# 李四 88 90 85
# 王五 92 88 90
七、总结
这篇文章把运算符优先级、格式化输出、input()类型转换都讲了一遍。
核心要点回顾:
- 运算符优先级:幂运算 > 乘除 > 加减
- 格式化输出推荐用 f-string 直接格式化:
f"{num:.2f}" - input()返回字符串,需要转换:
float(input("...")) - 用括号明确运算顺序,避免优先级错误
掌握这些知识,你就能写出更专业的Python程序了。
人生苦短,我用Python