编程练习
18 道题,覆盖十章核心能力。每题给解题思路、参考代码和运行结果,复制到本机跑一遍就能对照。
怎么用① 先自己写;② 卡住看思路,还不懂再看代码;③ 跑通后改改输入再试,才算真会。
第1章 Python 入门与环境
01
输出你的姓名、年龄和一句座右铭。 基础
解题思路print 三次,或一次用 sep/end 控制格式。
查看参考代码与运行结果
print("姓名:张三")
print("年龄:20")
print("座右铭:每天进步一点点")👀 运行结果
姓名:张三 年龄:20 座右铭:每天进步一点点
第2章 变量、类型与运算
02
输入两个数,输出和、差、积、商(保留 2 位小数)。 基础
解题思路input 读进来是字符串,先转 float;商用 /。
查看参考代码与运行结果
a = float(input("a="))
b = float(input("b="))
print(f"和={a+b}, 差={a-b}, 积={a*b}, 商={a/b:.2f}")👀 运行结果
a=10 b=4 和=14.0, 差=6.0, 积=40.0, 商=2.50
03
把字符串 "2025-07-01" 拆成 年/月/日 三个变量并输出。 基础
解题思路split("-") 得到列表,再解包。
查看参考代码与运行结果
s = "2025-07-01"
y, m, d = s.split("-")
print(f"{y}年{m}月{d}日")👀 运行结果
2025年07月01日
第3章 流程控制
04
判断输入的整数是奇数还是偶数。 基础
解题思路取余 % 2。
查看参考代码与运行结果
n = int(input("n="))
print("偶数" if n % 2 == 0 else "奇数")👀 运行结果
n=7 奇数
05
输出 1~100 中所有能被 3 整除但不能被 5 整除的数。 基础
解题思路for 遍历 + 两个条件用 and。
查看参考代码与运行结果
for i in range(1, 101):
if i % 3 == 0 and i % 5 != 0:
print(i, end=" ")👀 运行结果
3 6 9 12 18 21 24 27 33 36 39 42 48 51 54 57 63 66 69 72 78 81 84 87 93 96 99
06
打印九九乘法表。 进阶
解题思路双层循环,内层控制到 i 为止。
查看参考代码与运行结果
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j}x{i}={i*j}", end="\t")
print()👀 运行结果
1x1=1 1x2=2 2x2=4 ……(共 9 行)
07
猜数字:随机生成 1~100,循环猜直到猜中,提示大了或小了。 进阶
解题思路while True + input + 比较;random.randint。
查看参考代码与运行结果
import random
target = random.randint(1, 100)
while True:
g = int(input("猜一个 1~100:"))
if g > target:
print("大了")
elif g < target:
print("小了")
else:
print("猜对了!")
break👀 运行结果
猜一个 1~100:50 大了 猜一个 1~100:25 小了 …猜对为止
第4章 四大容器
08
求一个整数列表的最大值、最小值、平均值。 基础
解题思路内置 max/min/sum/len,或先排序。
查看参考代码与运行结果
nums = [88, 92, 76, 95, 60]
print(max(nums), min(nums), round(sum(nums) / len(nums), 1))👀 运行结果
95 60 82.2
09
统计一段文本里每个单词出现的次数(按空格切分)。 进阶
解题思路split 切词 + 字典计数 get(k, 0) + 1。
查看参考代码与运行结果
text = "java is easy and java is powerful"
cnt = {}
for w in text.split():
cnt[w] = cnt.get(w, 0) + 1
print(cnt)👀 运行结果
{'java': 2, 'is': 2, 'easy': 1, 'and': 1, 'powerful': 1}10
把两个列表合并成“姓名: 分数”的字典,并按分数降序输出。 进阶
解题思路zip 配对 + dict;sorted 按值排序。
查看参考代码与运行结果
names = ["张三", "李四", "王五"]
scores = [89, 92, 78]
d = dict(zip(names, scores))
for k, v in sorted(d.items(), key=lambda x: x[1], reverse=True):
print(k, v)👀 运行结果
李四 92 张三 89 王五 78
11
求两个列表的公共元素与差集(不用双重循环)。 进阶
解题思路转成集合做 & 和 -。
查看参考代码与运行结果
a = [1, 2, 3, 4]
b = [3, 4, 5]
print(sorted(set(a) & set(b)))
print(sorted(set(a) - set(b)))👀 运行结果
[3, 4] [1, 2]
第5章 函数与模块
12
写函数判断一个数是否为素数并调用测试。 进阶
解题思路从 2 试除到平方根。
查看参考代码与运行结果
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
print(is_prime(29), is_prime(30))👀 运行结果
True False
13
写函数接收任意个分数,返回最高分、最低分与平均分。 进阶
解题思路*args + max/min/sum。
查看参考代码与运行结果
def summary(*scores):
return max(scores), min(scores), round(sum(scores) / len(scores), 1)
print(summary(88, 92, 76))👀 运行结果
(92, 76, 85.3)
第6章 面向对象
14
定义 Student 类(姓名、分数),带一个判断是否及格的方法,创建两个对象输出。 进阶
解题思路__init__ 存属性,方法返回 bool;用 f-string 输出。
查看参考代码与运行结果
class Student:
def __init__(self, name, score):
self.name, self.score = name, score
def passed(self):
return self.score >= 60
def __str__(self):
return f"{self.name}: {self.score}"
for s in (Student("张三", 89), Student("李四", 52)):
print(s, "及格" if s.passed() else "不及格")👀 运行结果
张三: 89 及格 李四: 52 不及格
第7章 异常与文件
15
读一个文本文件,统计行数与字符数(文件不存在时提示)。 进阶
解题思路with open + for line;try/except FileNotFoundError。
查看参考代码与运行结果
try:
with open("data.txt", encoding="utf-8") as f:
lines = f.readlines()
print(len(lines), sum(len(l) for l in lines))
except FileNotFoundError:
print("文件不存在")👀 运行结果
文件不存在(或输出行数与字符数)
16
把字典列表保存成 JSON,再读回来并打印第一条。 高阶
解题思路json.dump(ensure_ascii=False) / json.load。
查看参考代码与运行结果
import json
data = [{"name": "张三", "score": 89}]
with open("d.json", "w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False)
with open("d.json", encoding="utf-8") as f:
print(json.load(f)[0]["name"])👀 运行结果
张三
第8章 常用标准库
17
从字符串中提取所有手机号(11 位数字)。 高阶
解题思路re.findall(r"1\d{10}")。
查看参考代码与运行结果
import re
text = "联系 13812345678 或 13900001111,座机 010-12345678"
print(re.findall(r"1\d{10}", text))👀 运行结果
['13812345678', '13900001111']
第9章 数据处理与可视化
18
用 matplotlib 画一个柱状图:三门课的平均分,并保存成 png。 高阶
解题思路plt.bar + title/ylabel + savefig(在 show 前)。
查看参考代码与运行结果
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
plt.bar(["语文", "数学", "英语"], [88, 95, 79])
plt.title("各科平均分")
plt.ylabel("分数")
plt.savefig("bar.png", dpi=150)
print("已保存 bar.png")👀 运行结果
已保存 bar.png