✏️ 习题
第 3 章 · 分支结构 · 共 10 题 · 由易到难 · 源自课堂练习与上机题目
1
输入一个字母,判断是否为大写字母。如果是则提示"是大写字母!",否则提示"是小写字母!"或"是其它字母!"。
📝 样例输入: A
▶ 运行结果: 请输入一个字母:A
是大写字母!
▼
参考答案
python
x = input("请输入一个字母:")
if 'A' <= x <= 'Z':
print("是大写字母!")
elif 'a' <= x <= 'z':
print("是小写字母!")
else:
print("是其它字母!")
2
输入一个字符,如果它是一个大写字母,则把它变成小写字母;如果它是一个小写字母,则把它变成大写字母;其他字符不变。
要求:使用
要求:使用
ord() 和 chr() 函数实现,不使用 .lower() / .upper()。📝 样例输入: a
▶ 运行结果: 请输入一个字符: a
A
▼
参考答案
python
char = input("请输入一个字符: ")
if 'A' <= char <= 'Z':
# 大写转小写:ASCII 码差 32
new_char = chr(ord(char) + 32)
elif 'a' <= char <= 'z':
# 小写转大写:ASCII 码差 32
new_char = chr(ord(char) - 32)
else:
new_char = char
print(new_char)
3
输入一个整数,判断它能否分别被 3、5、7 整除,并输出以下信息之一:
(1)能同时被 3、5、7 整除;
(2)能被其中两数(要指出哪两个)整除;
(3)能被其中一个数(要指出哪一个)整除;
(4)不能被 3、5、7 中任一个整除。
(1)能同时被 3、5、7 整除;
(2)能被其中两数(要指出哪两个)整除;
(3)能被其中一个数(要指出哪一个)整除;
(4)不能被 3、5、7 中任一个整除。
📝 样例输入: 105
▶ 运行结果: 请输入一个整数:105
能同时被3, 5, 7整除
▼
参考答案
python
x = int(input("请输入一个整数:"))
if x % 3 == 0 and x % 5 == 0 and x % 7 == 0:
print("能同时被3, 5, 7整除")
elif x % 3 == 0 and x % 5 == 0:
print("能被3, 5整除")
elif x % 3 == 0 and x % 7 == 0:
print("能被3, 7整除")
elif x % 5 == 0 and x % 7 == 0:
print("能被5, 7整除")
elif x % 3 == 0:
print("能被3整除")
elif x % 5 == 0:
print("能被5整除")
elif x % 7 == 0:
print("能被7整除")
else:
print("不能被3, 5, 7整除")
4
某公司员工工资底薪为 2000 元,销售额与提成方式如下:
销售额 ≤ 2000:没有提成;
2000 < 销售额 ≤ 5000 的部分:提成 8%;
5000 < 销售额 ≤ 10000 的部分:提成 10%;
销售额 > 10000 的部分:提成 12%。
输入销售额,计算员工应付工资。
销售额 ≤ 2000:没有提成;
2000 < 销售额 ≤ 5000 的部分:提成 8%;
5000 < 销售额 ≤ 10000 的部分:提成 10%;
销售额 > 10000 的部分:提成 12%。
输入销售额,计算员工应付工资。
📝 样例输入: 8000
▶ 运行结果: 输入员工的销售额:8000
应付工资:2540.0
▼
参考答案
python
s = float(input("输入员工的销售额:"))
j = 0 # 提成
# 从高到低判断,逐段累加提成
if s > 10000:
j = j + (s - 10000) * 0.12
s = 10000
if s > 5000:
j = j + (s - 5000) * 0.10
s = 5000
if s > 2000:
j = j + (s - 2000) * 0.08
x = 2000 + j # 底薪 + 提成
print(f"应付工资:{x}")
5
从键盘输入某个学生的四科成绩,求出该学生的最高分和最低分。
📝 样例输入: 85
92
78
96
▶ 运行结果: 请输入第1科成绩:85
请输入第2科成绩:92
请输入第3科成绩:78
请输入第4科成绩:96
最高分:96.0
最低分:78.0
▼
参考答案
python
s1 = float(input("请输入第1科成绩:"))
s2 = float(input("请输入第2科成绩:"))
s3 = float(input("请输入第3科成绩:"))
s4 = float(input("请输入第4科成绩:"))
# 假设第一个成绩既是最高分也是最低分
max_score = s1
min_score = s1
# 逐个比较,更新最高分和最低分
if s2 > max_score:
max_score = s2
if s3 > max_score:
max_score = s3
if s4 > max_score:
max_score = s4
if s2 < min_score:
min_score = s2
if s3 < min_score:
min_score = s3
if s4 < min_score:
min_score = s4
print(f"最高分:{max_score}")
print(f"最低分:{min_score}")
6
设计一个自动售货机的程序,运行后显示可选商品菜单,用户输入数字选择商品后,提示所选择的内容。
📝 样例输入: 3
▶ 运行结果: ********************
* 可选择的按键: *
* 1.巧克力 *
* 2.香糕 *
* 3.可乐 *
********************
从1~3中选择按键: 3
你选择了可乐
▼
参考答案
python
print("********************")
print("* 可选择的按键: *")
print("* 1.巧克力 *")
print("* 2.香糕 *")
print("* 3.可乐 *")
print("********************")
choice = input("从1~3中选择按键: ")
match choice:
case "1":
print("你选择了巧克力")
case "2":
print("你选择了香糕")
case "3":
print("你选择了可乐")
case _:
print("输入错误,请选择1-3")
7
编写函数
get_weekday(day_num),输入数字 1-7,返回对应的星期几。输入其他数字返回"输入错误,请输入1-7的数字"。使用 match-case 实现。▶ 运行结果: 数字 3 → 星期三
数字 7 → 星期日
数字 9 → 输入错误,请输入1-7的数字
▼
参考答案
python
def get_weekday(day_num):
match day_num:
case 1:
return "星期一"
case 2:
return "星期二"
case 3:
return "星期三"
case 4:
return "星期四"
case 5:
return "星期五"
case 6:
return "星期六"
case 7:
return "星期日"
case _:
return "输入错误,请输入1-7的数字"
# 测试
print(f"数字 3 → {get_weekday(3)}")
print(f"数字 7 → {get_weekday(7)}")
print(f"数字 9 → {get_weekday(9)}")
8
输入表示今天是一周内哪一天的数字(星期天是 0,星期一是 1,...,星期六是 6),并输入今天之后到未来某天的天数,然后输出该天是星期几。
📝 样例输入: 1
3
▶ 运行结果: 今天是周几(0=星期天, 1=星期一, ..., 6=星期六):1
未来第几天:3
星期四
▼
参考答案
python
today = int(input("今天是周几(0=星期天, 1=星期一, ..., 6=星期六):"))
f = int(input("未来第几天:"))
f_day = (today + f) % 7 # 取模实现循环
if f_day == 0:
print("星期天")
elif f_day == 1:
print("星期一")
elif f_day == 2:
print("星期二")
elif f_day == 3:
print("星期三")
elif f_day == 4:
print("星期四")
elif f_day == 5:
print("星期五")
elif f_day == 6:
print("星期六")
9
使用泽勒一致性算法计算某年某月某日是星期几。公式:
其中 h 为星期几(0=星期六, 1=星期天, ..., 6=星期五),q 为日,m 为月份(1月和2月按前一年的13月和14月计算),j 为世纪数,k 为世纪中的年份。
h = (q + 26 * (m + 1) // 10 + k + k // 4 + j // 4 + 5 * j) % 7其中 h 为星期几(0=星期六, 1=星期天, ..., 6=星期五),q 为日,m 为月份(1月和2月按前一年的13月和14月计算),j 为世纪数,k 为世纪中的年份。
📝 样例输入: 2013
1
25
▶ 运行结果: 请输入年份:2013
请输入月份:1
请输入日期:25
星期五
▼
参考答案
python
year = int(input("请输入年份:"))
m = int(input("请输入月份:"))
q = int(input("请输入日期:"))
# 1月和2月按前一年的13月和14月计算
if m == 1 or m == 2:
m += 12
year -= 1
k = year % 100 # 世纪中的年份
j = year // 100 # 世纪数
# 泽勒公式
h = (q + 26 * (m + 1) // 10 + k + k // 4 + j // 4 + 5 * j) % 7
if h == 0:
print("星期六")
elif h == 1:
print("星期天")
elif h == 2:
print("星期一")
elif h == 3:
print("星期二")
elif h == 4:
print("星期三")
elif h == 5:
print("星期四")
elif h == 6:
print("星期五")
10
输入年 y、月 m、日 d、时 h 和经过的小时数 k,计算经过 k 小时后的准确时间(注意跨日、跨月、跨年的进位)。
📝 样例输入: 2008
2
28
23
1
▶ 运行结果: 年:2008
月:2
日:28
时:23
经过的小时数:1
2008 2 29 0
▼
参考答案
python
y = int(input("年:"))
m = int(input("月:"))
d = int(input("日:"))
h = int(input("时:"))
k = int(input("经过的小时数:"))
h += k
# 计算增加的天数
n_days = h // 24
h %= 24
d += n_days
# 判断该月的天数
days = 0
if m == 1 or m == 3 or m == 5 or m == 7 or m == 8 or m == 10 or m == 12:
days = 31
elif m == 4 or m == 6 or m == 9 or m == 11:
days = 30
elif m == 2:
# 嵌套判断闰年
if (y % 4 == 0 and y % 100 != 0) or (y % 400 == 0):
days = 29
else:
days = 28
# 处理日期进位
if d > days:
d = (d - 1) % days + 1
m += 1
if m > 12:
m = (m - 1) % 12 + 1
y += 1
print(y, end=' ')
print(m, end=' ')
print(d, end=' ')
print(h)