✏️ 习题

第 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 中任一个整除。
📝 样例输入: 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%。
输入销售额,计算员工应付工资。
📝 样例输入: 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 = (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)