一个程序顶十本练习册!Python数学学习工具箱
开篇小故事
期末考试快到了,五年级的乐乐翻着厚厚的笔记本,里面有之前做的各种 Python 数学小工具:
乘法表、面积计算器、猜数字游戏、奇偶判断器、公约数计算器、多边形画图、质数判断器、分数计算器、数学测验……
"每个都是一个单独的 Python 文件,好乱啊!"
乐乐灵机一动:"能不能把它们合并成一个程序?想用哪个就选哪个,像工具箱一样!"
当然可以!今天我们就来做这件事。
你能学到什么
工具箱功能总览
===== Python 数学学习工具箱 =====1. 九九乘法表2. 面积/周长计算器3. 猜数字游戏4. 奇偶数判断5. 公约数/公倍数计算器6. 正多边形画图7. 质数判断8. 分数计算器9. 随机数学测验0. 退出=================================请选择功能(0-9):
完整代码(可直接复制运行)
import randomimport mathimport timeimport turtlefrom fractions import Fraction# ===== 功能1:九九乘法表 =====def chengfabiao(): print("\n===== 九九乘法表 =====") for i in range(1, 10): for j in range(1, i + 1): print(f"{i}×{j}={i*j}", end=" ") print() print()# ===== 功能2:面积周长计算器 =====def mianjizhouchang(): print("\n===== 面积/周长计算器 =====") chang = float(input("请输入长(cm):")) kuan = float(input("请输入宽(cm):")) print(f"面积 = {chang * kuan} cm²") print(f"周长 = {2 * (chang + kuan)} cm") print()# ===== 功能3:猜数字游戏 =====def caishuzi(): print("\n===== 猜数字游戏 =====") print("我心里想了一个 1~100 的数,你猜!") answer = random.randint(1, 100) times = 0 while True: guess = int(input("你猜是多少?")) times += 1 if guess > answer: print("大了!") elif guess < answer: print("小了!") else: print(f"对了!你一共猜了 {times} 次。") break print()# ===== 功能4:奇偶数判断 =====def jiouzhu(): print("\n===== 奇偶数判断 =====") num = int(input("请输入一个整数:")) if num % 2 == 0: print(f"{num} 是偶数(双数)") else: print(f"{num} 是奇数(单数)") print()# ===== 功能5:公约数公倍数 =====def yueshubeishu(): print("\n===== 公约数/公倍数计算器 =====") def gcd(a, b): while b != 0: a, b = b, a % b return a x = int(input("请输入第一个数:")) y = int(input("请输入第二个数:")) g = gcd(x, y) l = x * y // g print(f"最大公约数 = {g}") print(f"最小公倍数 = {l}") print()# ===== 功能6:正多边形画图 =====def duobianxing(): print("\n===== 正多边形画图 =====") print("注意:画图窗口会单独弹出,画完后关闭窗口即可返回菜单。") bian_shu = int(input("画几边形?")) bianchang = int(input("边长多少?")) turtle.speed(3) turtle.pensize(2) turtle.pencolor("blue") for i in range(bian_shu): turtle.forward(bianchang) turtle.right(360 / bian_shu) print(f"正{bian_shu}边形每个外角 = {360/bian_shu}°") turtle.done() print()# ===== 功能7:质数判断 =====def zhishu(): print("\n===== 质数判断器 =====") num = int(input("请输入一个大于1的整数:")) if num <= 1: print("1 既不是质数也不是合数。") print() return is_prime = True for i in range(2, int(math.sqrt(num)) + 1): if num % i == 0: print(f"{num} ÷ {i} = {num // i},所以 {num} 是合数。") is_prime = False break if is_prime: print(f"{num} 是质数!") print()# ===== 功能8:分数计算器 =====def fenshu(): print("\n===== 分数计算器 =====") print("格式:a/b 运算符 c/d,例如 1/2 + 1/3") print("运算符:+ - * /") shizi = input("请输入算式:") parts = shizi.split() try: f1_parts = parts[0].split("/") op = parts[1] f2_parts = parts[2].split("/") f1 = Fraction(int(f1_parts[0]), int(f1_parts[1])) f2 = Fraction(int(f2_parts[0]), int(f2_parts[1])) if op == "+": result = f1 + f2 elif op == "-": result = f1 - f2 elif op == "*": result = f1 * f2 elif op == "/": result = f1 / f2 else: print("不支持的运算符!") print() return print(f"{f1} {op} {f2} = {result}") except: print("格式错误!请按 a/b + c/d 的格式输入。") print()# ===== 功能9:随机数学测验 =====def ceyan(): print("\n===== 随机数学测验 =====") print("选择难度:") print("1. 简单(20以内加减)") print("2. 中等(100以内四则)") print("3. 困难(三位数乘除)") level = input("请选择:") if level == "1": max_num = 20 ops = ["+", "-"] elif level == "2": max_num = 100 ops = ["+", "-", "×"] else: max_num = 200 ops = ["×"] score = 0 wrong_list = [] start = time.time() for i in range(1, 11): a = random.randint(1, max_num) b = random.randint(1, min(max_num, 99)) op = random.choice(ops) if op == "+": correct = a + b elif op == "-": if a < b: a, b = b, a correct = a - b else: correct = a * b ans = input(f"第{i}题:{a} {op} {b} = ") try: if int(ans) == correct: print("✓") score += 1 else: print(f"✗ 答案是 {correct}") wrong_list.append(f"{a} {op} {b} = {correct}") except: print(f"✗ 答案是 {correct}") wrong_list.append(f"{a} {op} {b} = {correct}") used = round(time.time() - start, 1) print(f"\n得分:{score}/10,用时:{used}秒") if wrong_list: print("错题:") for w in wrong_list: print(f" · {w}") print()# ===== 主程序:菜单 =====def main(): while True: print("=" * 36) print(" Python 数学学习工具箱") print("=" * 36) print("1. 九九乘法表") print("2. 面积/周长计算器") print("3. 猜数字游戏") print("4. 奇偶数判断") print("5. 公约数/公倍数计算器") print("6. 正多边形画图") print("7. 质数判断") print("8. 分数计算器") print("9. 随机数学测验") print("0. 退出") print("=" * 36) choice = input("请选择功能(0-9):") if choice == "1": chengfabiao() elif choice == "2": mianjizhouchang() elif choice == "3": caishuzi() elif choice == "4": jiouzhu() elif choice == "5": yueshubeishu() elif choice == "6": duobianxing() elif choice == "7": zhishu() elif choice == "8": fenshu() elif choice == "9": ceyan() elif choice == "0": print("\n再见!祝期末考试顺利!") break else: print("输入有误,请输入 0~9 之间的数字。\n") input("按回车键继续……")# 程序入口if __name__ == "__main__": main()
使用方法
- 1. 把上面全部代码复制到一个 Python 文件里(比如叫
math_toolbox.py)
代码结构讲解
这个程序的架构像一个"商场导览":
| |
|---|
def func(): | |
main() | |
if __name__ == "__main__" | |
这种结构叫模块化编程,每个功能独立一个函数,互不干扰,方便修改和扩展。
动手挑战
学完这个代码,你应该已经具备了基本的 Python 编程能力。试试这些挑战:
| |
|---|
| |
| |
| |
| |
| 做一个"完全数查找器"(完全数 = 所有真因子之和等于自身) | |
学校信息课考点总结
- • 变量与数据类型(整数、浮点数、分数、字符串、列表)
- • 模块导入(random / math / time / turtle / fractions)
- • 算法思维(辗转相除法、质数判断优化、二分查找思想)
- • 计算思维(问题分解、模式识别、抽象化、算法设计)
这些正是《义务教育信息科技课程标准》中"算法与编程"模块的核心内容。