Hexvork
Python第四讲——Python运算符与格式化输出

Python第四讲——Python运算符与格式化输出

上一篇讲了字符串和列表的操作,这篇来聊聊运算符和格式化输出

运算符是编程的基础,格式化输出能让你的程序输出更专业。今天就把运算符优先级、格式化输出的三种写法、以及input()的类型转换技巧一次性讲透。

一、运算符优先级

1.运算符优先级表

下面这个表格按优先级从高到低排列,数字越小优先级越高

优先级运算符说明示例(x=3, y=2)结果
1**幂运算x ** y9(3的2次方)
2*乘法x * y6
2/除法(结果是float)x / y1.5
2//整除(向下取整)x // y1
2%取余数x % y1
3+加法x + y5
3-减法x - y1

除法运算的坑

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