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 元