1. 顺序结构概述
顺序结构是程序设计中最基础的控制结构——代码按照书写顺序从上到下依次执行,每条语句执行且只执行一次。
顺序结构程序的核心三要素:
- 输入(Input):通过
input()函数从键盘读取数据 - 处理(Process):通过运算符和表达式对数据进行加工
- 输出(Output):通过
print()函数将结果显示给用户
这三个步骤的英文缩写 IPO,是程序设计的最基本模型。绝大多数实用程序,无论多复杂,核心都遵循 IPO 模式。
Python
# 顺序结构的基本 IPO 模式
# 输入
name = input('请输入你的姓名:')
age = int(input('请输入你的年龄:'))
# 处理
birth_year = 2025 - age
# 输出
print(f'你好,{name}!你出生于 {birth_year} 年。')
2. 变量赋值与表达式
赋值语句
Python 使用 = 进行赋值,右边的表达式先计算,再赋给左边的变量。Python 还支持增强赋值运算符,让代码更简洁:
Python
x = 10
x += 3 # 等价于 x = x + 3,结果为 13
x -= 2 # 等价于 x = x - 2,结果为 11
x *= 2 # 等价于 x = x * 2,结果为 22
x //= 3 # 等价于 x = x // 3,结果为 7
x **= 2 # 等价于 x = x ** 2,结果为 49
print(x)
多重赋值与变量交换
Python 支持同时给多个变量赋值,以及用一行代码完成两个变量的交换:
Python
# 多重赋值
a = b = c = 0
# 用传统方法交换两个变量(借助临时变量)
a = "Python"
b = 4
print("a =", a)
print("b =", b)
t = a
a = b
b = t
print("a =", a)
print("b =", b)
# Python 风格:一行代码交换
a, b = b, a
print(f'a={a}, b={b}')
3. 数学计算应用
华氏温度转摄氏温度
公式:C = (F - 32) / 1.8,展示了 % 格式化与 f-string 两种输出方式:
Python
f = float(input('请输入华氏温度: '))
c = (f - 32) / 1.8
print('%.1f华氏度 = %.1f摄氏度' % (f, c)) # %格式化
print(f'{f:.1f}华氏度 = {c:.1f}摄氏度') # f-string
计算圆的周长和面积
演示 import math 导入模块以及 math.pi 使用精确圆周率:
Python
import math
radius = float(input('请输入圆的半径: '))
perimeter = 2 * math.pi * radius
area = math.pi * radius ** 2
print(f'周长: {perimeter:.2f}')
print(f'面积: {area:.2f}')
求一元二次方程的根
公式:x = (-b ± √(b²-4ac)) / 2a,Python 用 ** 0.5 代替开平方根:
Python
a = int(input("请输入a: "))
b = int(input("请输入b: "))
c = int(input("请输入c: "))
d = (b * b - 4 * a * c) ** 0.5
x1 = (-b + d) / (2 * a)
x2 = (-b - d) / (2 * a)
print("方程的两个根为:", x1, x2)
4. 数位分解技巧
利用整除(//)和取余(%)运算符可以提取一个整数的各个数位:
| 运算 | 含义 | 示例(num=123) |
|---|---|---|
num % 10 | 取个位 | 3 |
num // 10 | 去掉个位 | 12 |
num // 10 % 10 | 取十位 | 2 |
num // 100 | 取百位 | 1 |
两位数翻转
Python
# 将两位数的数位分解,并翻转此数。输入12,输出21
num = int(input("请输入一个两位的整数:"))
s = num // 10 # 十位
g = num % 10 # 个位
r_num = g * 10 + s
print("翻转后的数为:", r_num)
三位数各位数字求和
Python
# 读取一个0到999之间的整数,计算它各位数字之和
num = int(input())
a = num % 10 # 个位
num //= 10
b = num % 10 # 十位
num //= 10
c = num % 10 # 百位
print(f"各位数字之和是:{a + b + c}")
时间转换
把总秒数分解为"时:分:秒",是数位分解思路的实际应用:
Python
# 输入一个时间(h时m分s秒),计算经过n秒后的时间
h = int(input("时"))
m = int(input("分"))
s = int(input("秒"))
n = int(input("经过的时间(秒)"))
t = h * 3600 + m * 60 + s + n # 转换为总秒数
new_h = t // 3600
new_m = (t % 3600) // 60
new_s = t % 60
print(f"{new_h}时")
print(f"{new_m}分")
print(f"{new_s}秒")
5. 数据类型转换
用户通过 input() 输入的所有内容都是字符串类型,参与数值计算前必须转换:
| 函数 | 用途 | 示例 |
|---|---|---|
int(x) | 字符串 → 整数 | int("42") → 42 |
float(x) | 字符串 → 浮点数 | float("3.14") → 3.14 |
str(x) | 数字 → 字符串 | str(100) → "100" |
浮点数精度问题
在处理金额等精度敏感的计算时,应使用 decimal 模块代替 float:
Python
from decimal import Decimal
# 普通 float 会有精度误差
# s = int(float(input()) * 100) # 可能因精度丢失出错
# 使用 Decimal 保证精确计算
s = int(Decimal(input("请输入金额:")) * 100)
print(f"转换为分:{s}")
6. map() 函数
map() 函数可以把一个函数应用到序列的每个元素,常用于一次性输入多个数值:
Python
# 输入多个整数,用空格分隔
x, a, y, b = map(int, input().split())
# 等价于逐个 int(input()),但更简洁
# 示例:地球资源分配问题
# 输入:110 90 90 210
x, a, y, b = map(int, input().split())
max_people = (a * x - b * y) / (a - b)
print(round(max_people, 2))
7. 经典顺序结构案例
最小数量的硬币
将输入金额兑换成硬币,保证硬币数量最少——本质是从大面额到小面额依次整除:
Python
from decimal import Decimal
s = int(Decimal(input("请输入金额:")) * 100) # 转换为分
yy = s // 100; s = s % 100 # 一元
wj = s // 50; s = s % 50 # 五角
yj = s // 10; s = s % 10 # 一角
wf = s // 5; s = s % 5 # 五分
print(f"{yy}个一元 {wj}个五角 {yj}个一角 {wf}个五分 {s}个一分")
牛吃牧草(线性方程组)
用代数方法列方程,再用顺序结构求解——展示程序如何替代手算过程:
Python
"""
有一牧场,可供15头牛吃20天,或供20头牛吃10天。
牧场每天新生的草量可供几头牛吃1天?
解题思路:
原来草量 + 增长×20 = 15×20×a
原来草量 + 增长×10 = 20×10×a
两式相减 → 增长×10 = 100a → 增长 = 10a → 结果 = 10
"""
s1 = 15 * 20
s2 = 20 * 10
s = (s1 - s2) / (20 - 10)
print("每天新生的草量可供", int(s), "头牛吃1天")