✏️ 实例解析

专项训练 · 8 大程序类别 · 共 16 题 · 源自课堂实例

答案默认折叠,点击题目或右侧开关控制显示
展开所有答案

【程序类别1】累加累乘

1
计算数列 1 + 1/2 + 1/3 + 1/4 + ... + 1/n 的和,n 由用户输入(n≥1)。
📝 样例输入: 4
▶ 运行结果: 请输入n的值(n≥1):数列前4项和:2.083333
▼
参考答案
python
n = int(input("请输入n的值(n≥1):"))
if n < 1:
    print("输入错误,n需≥1")
else:
    sum_series = 0.0 # 用浮点数存储结果
    for i in range(1, n + 1):
        sum_series += 1 / i
    print(f"数列前{n}项和:{sum_series:.6f}") # 保留6位小数
2
编写程序,让用户输入一个正整数 n,计算 n 的阶乘(n! = 1×2×...×n)。如果用户输入非正整数,提示"输入错误,请输入正整数"。
📝 样例输入: 5
▶ 运行结果: 请输入一个正整数:5的阶乘是:120
▼
参考答案
python
n = int(input("请输入一个正整数:"))
if n <= 0:
    print("输入错误,请输入正整数")
else: # 计算阶乘
    factorial = 1
    for i in range(1, n + 1):
        factorial *= i
    print(f"{n}的阶乘是:{factorial}")

【程序类别2】文本作图

3
编写程序,输入金字塔高度 n(如 n=4),打印字母金字塔(中间为当前行对应的字母,向两边递减)。
🎯 目标图形: A ABA ABCBA ABCDCBA
▶ 运行结果: 请输入金字塔高度: 4 A ABA ABCBA ABCDCBA
▼
参考答案
python
# 思路:每行 = 空格 + 递增字母 + 递减字母(去掉最后一个)
n = int(input("请输入金字塔高度:"))
for i in range(n):
    # 1. 打印左侧空格
    print(" " * (n - 1 - i), end="")
    # 2. 打印递增字母(A到当前字母)
    for j in range(i + 1):
        print(chr(65 + j), end="")
    # 3. 打印递减字母(当前字母前一个到A)
    for j in range(i - 1, -1, -1):
        print(chr(65 + j), end="")
    # 4. 换行
    print()
4
编写程序,打印一个高度为 5 的等腰三角形(* 为主体,空格补位)。
▶ 运行结果: * *** ***** ******* *********
▼
参考答案
python
# 思路:每行 = 空格 + * + 空格
# 行数5,第i行(从0开始):空格数=4-i,*数=2i+1
height = 5
for i in range(height): # 计算空格和*的数量
    space = " " * (height - 1 - i)
    star = "*" * (2 * i + 1)
    print(space + star)
5
编写程序,打印一个边长为 4 的菱形(* 组成)。
▶ 运行结果: * *** ***** ******* ***** *** *
▼
参考答案
python
# 思路:菱形=上三角+下三角
height = 4
# 打印上三角(含中间行)
for i in range(height):
    space = " " * (height - 1 - i)
    star = "*" * (2 * i + 1)
    print(space + star)
# 打印下三角(去掉最后一行)
for i in range(height-2, -1, -1):
    space = " " * (height - 1 - i)
    star = "*" * (2 * i + 1)
    print(space + star)

【程序类别3】素数

6
编写程序,输出 100 以内的所有质数,要求每行打印 5 个。
▶ 运行结果: 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
▼
参考答案
python
primes = []
for num in range(2, 101):
    is_prime = True
    for i in range(2, num):            #质数判断
        if num % i == 0:
            is_prime = False
            break
    if is_prime:
        primes.append(str(num))
for i in range(0,len(primes),5):    #每行打印5个
    print(" ".join(primes[i:i+5]))
7
编写函数 count_primes(start, end),接收两个正整数(start < end),返回该区间内(含两端)的质数个数,并打印所有质数。例如:调用 count_primes(10, 30) → 输出 10 到 30 之间的质数有:11 13 17 19 23 29,共 6 个。
▶ 运行结果: 10到30之间的质数有:11 13 17 19 23 29 质数的总个数:6
▼
参考答案
python
# 定义要统计的区间
start = 10
end = 30
# 存储区间内的质数
prime_list = []
# 遍历区间内的每个数,判断是否为质数
for num in range(start, end + 1):
    # 基础质数判断逻辑
    if num <= 1:
        continue
    if num == 2:
        prime_list.append(num)
        continue
    if num % 2 == 0:
        continue
    # 判断奇数是否为质数(只需检查到√num)
    is_prime = True
    for i in range(3,int(num ** 0.5) + 1,2):
        if num % i == 0:
            is_prime = False
            break
    if is_prime:
        prime_list.append(num)
# 打印结果
# 把质数列表转成字符串,用空格分隔
prime_str = " ".join(map(str, prime_list))
# 输出质数列表和个数
print(f"{start}到{end}之间的质数有:{prime_str}")
print(f"质数的总个数:{len(prime_list)}")

【程序类别4】数列

8
斐波那契数列的定义:第 1 项为 0,第 2 项为 1,从第 3 项开始,每一项等于前两项之和。编写函数接收参数 n,返回斐波那契数列的前 n 项。例如:输入 n=6,输出 [0, 1, 1, 2, 3, 5]。
▶ 运行结果: [0, 1, 1, 2, 3, 5]
▼
参考答案
python
def fibonacci(n):
    # 处理边界情况:n为0或负数时返回空列表
    if n <= 0:
        return []
    # n=1时,仅返回第一个数0
    elif n == 1:
        return [0]
    # n=2时,返回前两个数[0, 1]
    elif n == 2:
        return [0, 1]
    # n>2时,循环生成后续项
    else:
        fib_list = [0, 1]
        # 从第3项(索引2)开始,直到第n项(索引n-1)
        for i in range(2, n):
            # 第i项 = 第i-1项 + 第i-2项
            next_num = fib_list[i-1] + fib_list[i-2]
            fib_list.append(next_num)
        return fib_list
print(fibonacci(6))
9
编写函数接收起始值 start、公比 ratio、项数 n,生成等比数列(允许浮点数)。要求:如果公比为 0,返回仅包含起始值、后续全为 0 的列表;如果项数为 0,返回空列表。例如:输入 start=2, ratio=0.5, n=4,输出 [2, 1.0, 0.5, 0.25]。
▶ 运行结果: [2, 1.0, 0.5, 0.25]
▼
参考答案
python
def generate_geometric_sequence(start, ratio, n):
    """生成等比数列,支持浮点数和边界处理"""
    if n == 0:
        return []
    sequence = [start] # 第一项为起始值
    # 从第二项开始计算
    for i in range(1, n):
        current = start * (ratio ** i)
        sequence.append(current)
    return sequence
print(generate_geometric_sequence(2, 0.5, 4)) # [2, 1.0, 0.5, 0.25]

【程序类别5】闰年

10
编写函数接收两个整数 start_year 和 end_year(保证 start_year ≤ end_year),返回该区间内所有闰年的列表(包含起止年份)。例如:输入 start_year=2000, end_year=2010,输出 [2000, 2004, 2008]。
▶ 运行结果: [2000, 2004, 2008]
▼
参考答案
python
def get_leap_years(start_year, end_year):
    leap_years = []
    # 遍历区间内的每一个年份
    for year in range(start_year, end_year + 1):
        # 闰年判断规则:
        # 1. 能被400整除  或  2. 能被4整除但不能被100整除
        if (year % 400 == 0) or (year % 4 == 0 and year % 100 != 0):
            leap_years.append(year)
    return leap_years
print(get_leap_years(2000, 2010))  # 输出:[2000, 2004, 2008]

【程序类别6】数位分解

11
编写一个 Python 函数,接收一个非负整数 num,返回一个列表,包含该数字的每一位数字(按从高位到低位的顺序)。要求:输入为 0 时返回 [0];仅处理非负整数,若输入负数返回空列表。例如:输入 1234 → [1, 2, 3, 4];输入 0 → [0];输入 -567 → []。
▶ 运行结果: [1, 2, 3, 4] [0] []
▼
参考答案
python
def extract_digits(num):
    """提取非负整数的每一位数字(高位到低位)"""
    # 处理负数和非整数情况
    if not isinstance(num, int) or num < 0:
        return [] # 处理0的特殊情况
    if num == 0:
        return [0]
    # 存储数位的列表
    digits = []
    # 先将数字转为字符串,遍历每个字符再转回整数
    for char in str(num):
        digits.append(int(char))
    return digits
print(extract_digits(1234)) # [1, 2, 3, 4]
print(extract_digits(0)) # [0]
print(extract_digits(-567)) # []
12
编写函数接收两个参数:整数 a(1-9)、项数 n(正整数),计算并返回 a + aa + aaa + ... +(n 个 a)的值。例如:输入 a=2, n=5,输出 24690。
▶ 运行结果: 24690
▼
参考答案
python
def compute_sum(a, n):
    total = 0
    current = 0
    for i in range(n):
        current = current * 10 + a
        total += current
    return total
print(compute_sum(2,5))

【程序类别7】字典

13
编写函数接收一个字典 d(键为字符串,值为整数)和一个阈值 threshold,返回一个新字典,仅包含值大于 threshold 的键值对。要求:不修改原字典,返回全新的字典。例如:输入 d={"math": 85, "chinese": 92, "english": 78}, threshold=80 → 输出 {"math": 85, "chinese": 92};输入 d={"a": 5, "b": 3, "c": 7}, threshold=7 → 输出 {}(值等于阈值不保留)。
▶ 运行结果: {'math': 85, 'chinese': 92} {}
▼
参考答案
python
def filter_dict_by_value(d, threshold):
    """筛选字典中值大于阈值的键值对,返回新字典"""
    filtered_dict = {} # 遍历原字典的键值对
    for key, value in d.items():
        if value > threshold:
            filtered_dict[key] = value
    return filtered_dict
scores = {"math": 85, "chinese": 92, "english": 78}
print(filter_dict_by_value(scores,80))        #{'math':85,'chinese':92}
print(filter_dict_by_value({"a": 5, "b": 3, "c": 7}, 7))     # {}
14
有一个嵌套字典表示学生信息,编写函数完成以下操作:1. 获取学号 001 学生的数学成绩;2. 将学号 002 学生的英语成绩修改为 85;3. 为学号 001 的学生新增 chinese 成绩,值为 95;4. 返回修改后的完整字典。
🎯 数据结构: students = { "001": {"name": "张三", "scores": {"math": 88, "english": 90}}, "002": {"name": "李四", "scores": {"math": 75, "english": 82}}}
▶ 运行结果: 001的数学成绩: 88 {'001': {'name': '张三', 'scores': {'math': 88, 'english': 90, 'chinese': 95}}, '002': {'name': '李四', 'scores': {'math': 75, 'english': 85}}}
▼
参考答案
python
def update_nested_dict():
    # 初始化嵌套字典
    students = {
        "001": {"name": "张三", "scores": {"math": 88, "english": 90}},
        "002": {"name": "李四", "scores": {"math": 75, "english": 82}}
    }
    # 1. 获取001的数学成绩
    math_score_001 = students["001"]["scores"]["math"]
    print("001的数学成绩:", math_score_001)  # 输出88
    # 2. 修改002的英语成绩为85
    students["002"]["scores"]["english"] = 85
    # 3. 为001新增语文成绩
    students["001"]["scores"]["chinese"] = 95
    # 4. 返回修改后的字典
    return students
result = update_nested_dict()
print(result)
    # 输出:
    # {'001': {'name': '张三', 'scores': {'math': 88, 'english': 90, 'chinese': 95}},
    #  '002': {'name': '李四', 'scores': {'math': 75, 'english': 85}}}

【程序类别8】函数

15
编写函数 calculate_average:接收任意个数的数字参数(位置可变参数);计算并返回这些数字的平均值;若没有传入参数返回 0;过滤非数字类型的参数(仅计算数字的平均值)。例如:输入 1, 2, 3, 4 → 2.5;输入 10, "abc", 20, 30 → 20.0(仅计算 10、20、30);无参数 → 0。
▶ 运行结果: 2.5 20.0 0
▼
参考答案
python
def calculate_average(*args):
    """计算任意个数数字的平均值,过滤非数字参数"""
    # 筛选出数字类型的参数
    numbers = []
    for arg in args:
        if isinstance(arg, (int, float)):
            numbers.append(arg)
    # 处理空列表
    if not numbers:
        return 0
    # 计算平均值
    return sum(numbers) / len(numbers)
print(calculate_average(1, 2, 3, 4)) # 2.5
print(calculate_average(10, "abc", 20, 30)) # 20.0
print(calculate_average()) # 0
16
BMI(身体质量指数)公式:体重(kg) / 身高(m)²。编写函数 calculate_bmi:1. 接收参数 weight(体重,必传)、height(身高,必传)、unit(单位,默认 "m",可选 "m"/"cm");2. 若 unit="cm",先将身高转换为米(除以 100);3. 返回保留 2 位小数的 BMI 值;4. 处理异常(如身高为 0,返回 None)。例如:输入 weight=60, height=1.75 → 19.59;输入 weight=60, height=175, unit="cm" → 19.59;输入 weight=60, height=0 → None。
▶ 运行结果: 19.59 19.59 None
▼
参考答案
python
def calculate_bmi(weight, height, unit="m"):
    """计算BMI,支持米/厘米单位,默认米"""
    # 基础校验
    if not (isinstance(weight, (int, float)) and isinstance(height, (int, float))):
        return None
    if weight <= 0 or height <= 0:
        return None
    # 单位转换:厘米转米
    if unit == "cm":
        height = height / 100
    elif unit != "m":
        return None # 无效单位
    # 计算BMI并保留2位小数
    bmi = weight / (height ** 2)
    return round(bmi, 2)
print(calculate_bmi(60, 1.75)) # 19.59
print(calculate_bmi(60, 175, "cm")) # 19.59
print(calculate_bmi(60, 0)) # None