9. 经典案例集
① 三角形周长与面积
输入三条边,先用三角形成立条件(任意两边之和大于第三边)判断能否构成三角形,再用海伦公式计算面积。
python
a = float(input('a = '))
b = float(input('b = '))
c = float(input('c = '))
if a + b > c and a + c > b and b + c > a:
l = a + b + c
print(f'周长: {l}')
s = l / 2
area = (s * (s - a) * (s - b) * (s - c)) ** 0.5
print(f'面积: {area:.2f}')
else:
print('不能构成三角形')
📝 样例输入:
输入
3
4
5
▶ 运行结果:
输出
a = 3
b = 4
c = 5
周长: 12.0
面积: 6.00
② 转换大小写字母
输入一个字符:大写字母转小写,小写字母转大写,其他字符不变。
python
char = input("请输入一个字符: ")
if 'A' <= char <= 'Z':
print(char.lower()) # 大写转小写
elif 'a' <= char <= 'z':
print(char.upper()) # 小写转大写
else:
print(char) # 其他字符不变
📝 样例输入:
输入
A
▶ 运行结果:
输出
请输入一个字符: A
a
💡 不用 .lower()/.upper() 的写法
利用 ASCII 码:大写字母与小写字母相差 32,可用 chr(ord(char) + 32) 转小写,chr(ord(char) - 32) 转大写。
③ 回文数判断
输入一个三位整数,判断是否为回文数(正读反读都一样,如 121、131)。
python
num = int(input("请输入一个三位整数:"))
origin_num = num
# 逐位提取并反转
a = num % 10 # 个位
num //= 10
b = num % 10 # 十位
num //= 10
c = num % 10 # 百位
reversed_num = a * 100 + b * 10 + c
if reversed_num == origin_num:
print("是回文")
else:
print("不是回文")
📝 样例输入:
输入
123
▶ 运行结果:
输出
请输入一个三位整数:123
不是回文
④ 剪刀石头布
计算机随机出拳(0=剪刀,1=石头,2=布),用户输入数字,判断输赢。利用 user_num - comp_num 的差值判断结果。
python
import random
comp_num = random.randint(0, 2)
user_num = int(input("请输入 0(剪刀) 1(石头) 2(布): "))
# 数字转中文
comp_str = ""
if comp_num == 0:
comp_str = "剪刀"
elif comp_num == 1:
comp_str = "石头"
else:
comp_str = "布"
user_str = ""
if user_num == 0:
user_str = "剪刀"
elif user_num == 1:
user_str = "石头"
else:
user_str = "布"
print(f"电脑出的是{comp_str}")
print(f"用户出的是{user_str}")
# 利用差值判断输赢
res = user_num - comp_num
if res == 0:
print("平局")
elif res == -2 or res == 1:
print("用户赢")
else:
print("电脑赢")
📝 样例输入:
输入
0
▶ 运行结果:
输出
请输入 0(剪刀) 1(石头) 2(布): 0
电脑出的是剪刀
用户出的是剪刀
平局
💡 差值判断原理
0(剪刀) - 2(布) = -2 → 剪刀胜布 ✅
1(石头) - 0(剪刀) = 1 → 石头胜剪刀 ✅
2(布) - 1(石头) = 1 → 布胜石头 ✅
所以 res == -2 or res == 1 时用户赢。
⑤ 分段函数求值
有一分段函数,输入 x,计算 y 的值:
python
# { 1, x < -10
# { 2, -10 <= x <= 10
# { 3, x > 10
x = float(input("请输入 x:"))
if x < -10:
y = 1
elif x <= 10:
y = 2
else:
y = 3
print(f"y = {y}")
📝 样例输入:
输入
5
▶ 运行结果:
输出
请输入 x:5
y = 2
⑥ 中彩票
随机产生一个两位数,用户输入一个两位数,根据匹配规则判定奖金:
- 完全相同(含顺序)→ 10000 元
- 数字相同但顺序不同 → 3000 元
- 有一位数字相同 → 1000 元
- 完全不同 → 0 元
python
import random
random_num = random.randint(10, 99)
print(f"中奖号码:{random_num}")
user_num = int(input("请输入你的两位数:"))
# 拆分各位数字
r1 = random_num % 10 # 随机数的个位
r2 = random_num // 10 # 随机数的十位
u1 = user_num % 10 # 用户数的个位
u2 = user_num // 10 # 用户数的十位
if random_num == user_num:
print(10000)
elif r1 == u2 and r2 == u1:
print(3000)
elif r1 == u1 or r1 == u2 or r2 == u1 or r2 == u2:
print(1000)
else:
print(0)
📝 样例输入:
输入
42
▶ 运行结果:
输出
中奖号码:42
请输入你的两位数:42
10000
⑦ 计算电费(峰谷电价)
传统用电 0.538 元/度,高峰期 0.568 元/度,低谷期 0.288 元/度。输入高峰和低谷用电量,分别计算两种方式的电费及年度差值。
python
n1 = eval(input("请输入本月(峰)用电度数:"))
n2 = eval(input("请输入本月(谷)用电度数:"))
v1 = 0.538 * (n1 + n2) # 传统计费
v2 = n1 * 0.568 + n2 * 0.288 # 峰谷计费
v3 = (v1 - v2) * 12 # 年度差值
print(f"传统用电计费,付 {round(v1, 1)} 元")
print(f"峰谷用电计费,付 {round(v2, 1)} 元")
print(f"一年下来,峰谷电节省 {round(v3, 1)} 元")
📝 样例输入:
输入
100
50
▶ 运行结果:
输出
请输入本月(峰)用电度数:100
请输入本月(谷)用电度数:50
传统用电计费,付 80.7 元
峰谷用电计费,付 71.2 元
一年下来,峰谷电节省 114.0 元