✏️ 实例解析
专项训练 · 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