第7课:小小计算器——让电脑做数学
🎯 本课目标
- 制作完整的四则运算计算器
- 掌握加减乘除、取余、整除运算
- 实现连续计算功能
- 添加错误处理(如除零错误)
- 制作用户友好的交互界面
- 综合运用前6课知识
🧮 趣味引入:每个人都需要计算器
想一想:你什么时候需要计算器?
- 做数学作业时 ✓
- 算零花钱时 ✓
- 购物算总价时 ✓
- 做饭量材料时 ✓
- 玩游戏算分时 ✓
今天,我们不只用计算器,还要创造一个属于自己的计算器!让它有你喜欢的颜色、特殊的功能,甚至能记住你的计算习惯!
🔢 第一部分:基础运算函数
在制作完整计算器前,先学习每种运算的实现。
1. 加法计算器
# 加法计算器
print("➕ 加法计算器")
print("=" * 20)
num1 = float(input("请输入第一个数:"))
num2 = float(input("请输入第二个数:"))
result = num1 + num2
print(f"{num1} + {num2} = {result}")
print(f"计算完成!结果是:{result}")

2. 减法计算器
# 减法计算器
print("➖ 减法计算器")
print("=" * 20)
num1 = float(input("请输入被减数:"))
num2 = float(input("请输入减数:"))
result = num1 - num2
print(f"{num1} - {num2} = {result}")
print(f"计算完成!结果是:{result}")
3. 乘法计算器
# 乘法计算器
print("✖️ 乘法计算器")
print("=" * 20)
num1 = float(input("请输入第一个数:"))
num2 = float(input("请输入第二个数:"))
result = num1 * num2
print(f"{num1} × {num2} = {result}")
print(f"计算完成!结果是:{result}")
4. 除法计算器(带错误处理)
# 除法计算器
print("➗ 除法计算器")
print("=" * 20)
num1 = float(input("请输入被除数:"))
num2 = float(input("请输入除数:"))
# 防止除零错误
if num2 == 0:
print("❌ 错误:除数不能为0!")
else:
result = num1 / num2
print(f"{num1} ÷ {num2} = {result}")
print(f"计算完成!结果是:{result}")

5. 综合练习:四则运算
# 四则运算计算器
print("🧮 四则运算计算器")
print("=" * 20)
# 输入数字
num1 = float(input("请输入第一个数:"))
num2 = float(input("请输入第二个数:"))
# 计算结果
add_result = num1 + num2
sub_result = num1 - num2
mul_result = num1 * num2
# 除法要特别处理
if num2 == 0:
div_result = "(除数不能为0)"
else:
div_result = num1 / num2
# 输出结果
print("\n📊 计算结果:")
print(f"{num1} + {num2} = {add_result}")
print(f"{num1} - {num2} = {sub_result}")
print(f"{num1} × {num2} = {mul_result}")
print(f"{num1} ÷ {num2} = {div_result}")
🎪 第二部分:制作基础计算器
项目1:简单四则计算器
# 简单四则计算器
print("🧮 简单四则计算器")
print("=" * 30)
while True:
print("\n请选择运算:")
print("1. 加法 (+)")
print("2. 减法 (-)")
print("3. 乘法 (*)")
print("4. 除法 (/)")
print("5. 退出")
choice = input("\n请输入选择(1-5):")
if choice == "5":
print("感谢使用计算器!再见!")
break
if choice not in ["1", "2", "3", "4"]:
print("❌ 错误:请输入1-5的数字!")
continue
# 输入数字
try:
num1 = float(input("请输入第一个数:"))
num2 = float(input("请输入第二个数:"))
except:
print("❌ 错误:请输入有效的数字!")
continue
# 进行计算
if choice == "1": # 加法
result = num1 + num2
symbol = "+"
elif choice == "2": # 减法
result = num1 - num2
symbol = "-"
elif choice == "3": # 乘法
result = num1 * num2
symbol = "×"
elif choice == "4": # 除法
if num2 == 0:
print("❌ 错误:除数不能为0!")
continue
result = num1 / num2
symbol = "÷"
# 输出结果
print(f"\n📈 计算结果:")
print(f"{num1} {symbol} {num2} = {result}")
# 询问是否继续
again = input("\n是否继续计算?(是/否)")
if again.lower() != "是":
print("感谢使用计算器!")
break

项目2:连续计算器
# 连续计算器
print("🧮 连续计算器")
print("=" * 30)
print("说明:可以连续进行多次计算")
print("输入'='查看结果,'C'清空,'Q'退出")
print()
result = 0
history = [] # 记录计算历史
is_first = True
while True:
if is_first:
# 第一次计算
try:
result = float(input("请输入数字:"))
history.append(str(result))
is_first = False
except:
print("❌ 错误:请输入有效的数字!")
continue
else:
# 显示当前结果
print(f"\n当前结果:{result}")
# 输入运算符
operator = input("\n请输入运算符(+ - * /)或命令(= C Q):")
if operator == "=":
# 显示结果和历史
print(f"\n最终结果:{result}")
print(f"计算过程:{' '.join(history)} = {result}")
break
elif operator.upper() == "C":
# 清空
result = 0
history = []
is_first = True
print("已清空!")
continue
elif operator.upper() == "Q":
# 退出
print(f"最终结果:{result}")
print("感谢使用计算器!")
break
elif operator in ["+", "-", "*", "/"]:
# 输入第二个数
try:
num = float(input("请输入数字:"))
except:
print("❌ 错误:请输入有效的数字!")
continue
# 进行计算
old_result = result
if operator == "+":
result += num
elif operator == "-":
result -= num
elif operator == "*":
result *= num
elif operator == "/":
if num == 0:
print("❌ 错误:除数不能为0!")
continue
result /= num
# 记录历史
history.append(f"{operator} {num}")
print(f"{old_result} {operator} {num} = {result}")
else:
print("❌ 错误:无效的运算符!")
🎮 第三部分:实用计算工具
工具1:购物计算器
# 购物计算器
print("🛒 购物计算器")
print("=" * 30)
print("帮你计算购物总价和找零")
# 输入商品信息
items = []
total = 0
print("\n请输入商品信息(输入'完成'结束)")
while True:
name = input("商品名称:")
if name == "完成":
break
try:
price = float(input("商品单价:"))
quantity = int(input("商品数量:"))
except:
print("❌ 错误:请输入有效的数字!")
continue
item_total = price * quantity
items.append({
"name": name,
"price": price,
"quantity": quantity,
"total": item_total
})
total += item_total
print(f"已添加:{name} ×{quantity} = ¥{item_total:.2f}")
print()
# 显示购物清单
if items:
print("\n📋 购物清单")
print("-" * 40)
for item in items:
print(f"{item['name']:10} ¥{item['price']:6.2f} ×{item['quantity']:2} = ¥{item['total']:7.2f}")
print("-" * 40)
print(f"总计:¥{total:.2f}")
# 计算找零
money = float(input("\n支付金额:¥"))
if money < total:
print(f"❌ 金额不足!还差¥{total-money:.2f}")
else:
change = money - total
print(f"找零:¥{change:.2f}")
# 计算如何找零(简化版)
print("\n建议找零:")
denominations = [100, 50, 20, 10, 5, 1, 0.5, 0.1]
names = ["100元", "50元", "20元", "10元", "5元", "1元", "5角", "1角"]
for denom, name in zip(denominations, names):
if change >= denom:
count = int(change // denom)
change -= count * denom
if count > 0:
print(f" {name} × {count}")
else:
print("没有商品信息!")

工具2:成绩计算器
# 成绩计算器
print("📊 成绩计算器")
print("=" * 30)
print("帮你计算平均分和总分")
# 输入科目数量
try:
subject_count = int(input("有几个科目?"))
except:
print("❌ 错误:请输入有效的数字!")
exit()
# 输入各科成绩
scores = []
for i in range(subject_count):
while True:
try:
score = float(input(f"科目{i+1}的成绩:"))
if 0 <= score <= 100:
scores.append(score)
break
else:
print("❌ 成绩应该在0-100之间!")
except:
print("❌ 错误:请输入有效的数字!")
# 计算结果
total = sum(scores)
average = total / subject_count
highest = max(scores)
lowest = min(scores)
# 显示结果
print("\n📈 成绩报告")
print("-" * 30)
for i, score in enumerate(scores, 1):
print(f"科目{i}:{score}分")
print("-" * 30)
print(f"总分:{total}分")
print(f"平均分:{average:.1f}分")
print(f"最高分:{highest}分")
print(f"最低分:{lowest}分")
# 评级
if average >= 90:
grade = "优秀 🎉"
elif average >= 80:
grade = "良好 👍"
elif average >= 60:
grade = "及格 😊"
else:
grade = "不及格 💪"
print(f"评级:{grade}")
# 建议
if lowest < 60:
print("💡 建议:有不及格的科目,需要重点复习!")
elif average < 80:
print("💡 建议:成绩还不错,继续努力!")
else:
print("💡 建议:成绩很优秀,继续保持!")
工具3:单位换算器
# 单位换算器
print("📏 单位换算器")
print("=" * 30)
print("1. 长度换算")
print("2. 重量换算")
print("3. 温度换算")
print("4. 时间换算")
choice = input("\n请选择换算类型(1-4):")
if choice == "1":
# 长度换算
print("\n📏 长度换算")
value = float(input("请输入长度值:"))
unit = input("当前单位(m/cm/mm/km):")
if unit == "m":
print(f"{value}米 = {value*100}厘米")
print(f"{value}米 = {value*1000}毫米")
print(f"{value}米 = {value/1000}千米")
elif unit == "cm":
print(f"{value}厘米 = {value/100}米")
print(f"{value}厘米 = {value*10}毫米")
elif unit == "mm":
print(f"{value}毫米 = {value/10}厘米")
print(f"{value}毫米 = {value/1000}米")
elif unit == "km":
print(f"{value}千米 = {value*1000}米")
elif choice == "2":
# 重量换算
print("\n⚖️ 重量换算")
value = float(input("请输入重量值:"))
unit = input("当前单位(kg/g):")
if unit == "kg":
print(f"{value}千克 = {value*1000}克")
elif unit == "g":
print(f"{value}克 = {value/1000}千克")
elif choice == "3":
# 温度换算
print("\n🌡️ 温度换算")
value = float(input("请输入温度值:"))
unit = input("当前单位(C/F):")
if unit.upper() == "C":
fahrenheit = value * 9/5 + 32
print(f"{value}℃ = {fahrenheit:.1f}℉")
elif unit.upper() == "F":
celsius = (value - 32) * 5/9
print(f"{value}℉ = {celsius:.1f}℃")
elif choice == "4":
# 时间换算
print("\n⏰ 时间换算")
value = float(input("请输入时间值:"))
unit = input("当前单位(秒/分/时/天):")
if unit == "秒":
print(f"{value}秒 = {value/60:.2f}分钟")
print(f"{value}秒 = {value/3600:.4f}小时")
print(f"{value}秒 = {value/86400:.6f}天")
elif unit == "分":
print(f"{value}分钟 = {value*60}秒")
print(f"{value}分钟 = {value/60:.2f}小时")
elif unit == "时":
print(f"{value}小时 = {value*60}分钟")
print(f"{value}小时 = {value*3600}秒")
elif unit == "天":
print(f"{value}天 = {value*24}小时")
else:
print("❌ 错误:无效的选择!")
🎪 第四部分:计算器游戏
游戏1:24点游戏简化版
# 24点游戏(简化版)
import random
print("🎲 24点游戏(简化版)")
print("=" * 30)
print("用加减乘除让4个数字的结果等于24")
print()
# 生成4个数字
numbers = [random.randint(1, 9) for _ in range(4)]
print(f"四个数字是:{numbers[0]}, {numbers[1]}, {numbers[2]}, {numbers[3]}")
# 尝试找到一个解法
found = False
solutions = []
# 简化:只尝试一种顺序
a, b, c, d = numbers
# 尝试一些简单的组合
try_combinations = [
f"({a}+{b})+({c}+{d})",
f"({a}*{b})+({c}*{d})",
f"({a}+{b})*({c}+{d})",
f"({a}*{b})*({c}*{d})",
f"{a}*{b}*{c}*{d}",
f"{a}+{b}+{c}+{d}",
]
for expr in try_combinations:
try:
result = eval(expr)
if result == 24:
solutions.append(expr)
found = True
except:
pass
# 显示结果
if found:
print("\n✅ 找到解法:")
for i, sol in enumerate(solutions[:3], 1): # 只显示前3个
print(f"{i}. {sol} = 24")
# 让用户尝试
print("\n🤔 你能想到其他解法吗?")
user_solution = input("输入你的算式(用括号表示顺序):")
try:
user_result = eval(user_solution)
if user_result == 24:
print("🎉 正确!你的解法可行!")
else:
print(f"❌ 结果不对,你的算式结果={user_result}")
except:
print("❌ 算式格式错误!")
else:
print("😅 没找到简单解法,你可以试试看!")
user_solution = input("输入你的算式:")
try:
user_result = eval(user_solution)
if user_result == 24:
print("🎉 太棒了!你找到了解法!")
else:
print(f"❌ 结果不对,结果={user_result}")
except:
print("❌ 算式格式错误!")

游戏2:数学挑战赛
# 数学挑战赛
import random
import time
print("🏆 数学挑战赛")
print("=" * 30)
print("快速回答数学问题,看看你能得多少分!")
print("每题10秒时间")
print()
score = 0
total_questions = 5
for q in range(1, total_questions + 1):
# 生成题目
num1 = random.randint(1, 20)
num2 = random.randint(1, 20)
op = random.choice(["+", "-", "*"])
if op == "+":
correct = num1 + num2
question = f"{num1} + {num2}"
elif op == "-":
# 确保结果为正
num1, num2 = max(num1, num2), min(num1, num2)
correct = num1 - num2
question = f"{num1} - {num2}"
else: # "*"
num1 = random.randint(1, 10)
num2 = random.randint(1, 10)
correct = num1 * num2
question = f"{num1} × {num2}"
print(f"\n第{q}题:{question} = ?")
# 计时开始
start_time = time.time()
try:
user_answer = int(input("你的答案:"))
end_time = time.time()
time_used = end_time - start_time
if time_used > 10:
print(f"⏰ 超时!用时{time_used:.1f}秒")
continue
if user_answer == correct:
print(f"✅ 正确!用时{time_used:.1f}秒")
score += 1
else:
print(f"❌ 错误!正确答案是{correct}")
except:
print("❌ 请输入数字!")
# 显示结果
print(f"\n{'='*30}")
print(f"比赛结束!")
print(f"得分:{score}/{total_questions}")
if score == total_questions:
print("🎉 满分!你是数学天才!")
elif score >= total_questions * 0.8:
print("👍 很棒!继续加油!")
elif score >= total_questions * 0.6:
print("😊 不错!继续练习!")
else:
print("💪 加油!多练习会更好!")

🎨 项目:我的个性化计算器
# 我的个性化计算器
print("✨" * 10)
print(" 我的个性化计算器")
print("✨" * 10)
# 个性化设置
name = input("你的名字是?")
color = input("你喜欢的颜色是?")
print(f"\n欢迎{name}!")
print(f"这是一个{color}主题的计算器!")
# 主循环
memory = 0
history = []
while True:
print("\n" + "="*40)
print("1. 基本计算(加减乘除)")
print("2. 实用工具")
print("3. 记忆功能")
print("4. 查看历史")
print("5. 个性化设置")
print("6. 退出")
choice = input(f"\n{name},请选择功能(1-6):")
if choice == "1":
# 基本计算
print("\n🧮 基本计算")
print("支持:+ - * /")
try:
num1 = float(input("第一个数:"))
op = input("运算符:")
num2 = float(input("第二个数:"))
if op == "+":
result = num1 + num2
elif op == "-":
result = num1 - num2
elif op == "*":
result = num1 * num2
elif op == "/":
if num2 == 0:
print("❌ 除数不能为0!")
continue
result = num1 / num2
else:
print("❌ 无效的运算符!")
continue
print(f"结果:{num1} {op} {num2} = {result}")
history.append(f"{num1} {op} {num2} = {result}")
except:
print("❌ 输入错误!")
elif choice == "2":
# 实用工具
print("\n🔧 实用工具")
print("1. 计算平均数")
print("2. 计算百分比")
print("3. 计算面积")
tool = input("选择工具:")
if tool == "1":
# 平均数
nums = input("输入数字(用空格分隔):").split()
nums = [float(n) for n in nums]
avg = sum(nums) / len(nums)
print(f"平均数:{avg:.2f}")
history.append(f"平均数:{nums} = {avg:.2f}")
elif tool == "2":
# 百分比
part = float(input("部分:"))
total = float(input("总数:"))
percent = (part / total) * 100
print(f"百分比:{percent:.1f}%")
history.append(f"百分比:{part}/{total} = {percent:.1f}%")
elif tool == "3":
# 面积
print("1. 长方形 2. 圆形")
shape = input("选择形状:")
if shape == "1":
length = float(input("长:"))
width = float(input("宽:"))
area = length * width
print(f"长方形面积:{area}")
history.append(f"长方形面积:{length}×{width}={area}")
elif shape == "2":
radius = float(input("半径:"))
area = 3.14159 * radius * radius
print(f"圆形面积:{area:.2f}")
history.append(f"圆形面积:半径{radius}={area:.2f}")
elif choice == "3":
# 记忆功能
print("\n💾 记忆功能")
print(f"当前记忆值:{memory}")
print("1. 存储到记忆")
print("2. 读取记忆")
print("3. 清除记忆")
mem_op = input("选择操作:")
if mem_op == "1":
try:
value = float(input("要存储的值:"))
memory = value
print(f"已存储:{value}")
except:
print("❌ 输入错误!")
elif mem_op == "2":
print(f"记忆值:{memory}")
elif mem_op == "3":
memory = 0
print("记忆已清除")
elif choice == "4":
# 查看历史
print("\n📜 计算历史")
if history:
for i, record in enumerate(history, 1):
print(f"{i}. {record}")
else:
print("还没有计算记录")
elif choice == "5":
# 个性化设置
print(f"\n🎨 个性化设置")
print(f"当前名字:{name}")
print(f"当前颜色:{color}")
new_name = input(f"新名字(回车保持'{name}'):")
new_color = input(f"新颜色(回车保持'{color}'):")
if new_name:
name = new_name
if new_color:
color = new_color
print(f"设置已更新!")
elif choice == "6":
# 退出
print(f"\n{name},感谢使用{color}主题计算器!")
print(f"今天共进行了{len(history)}次计算")
break
else:
print("❌ 无效的选择!")
print("✨" * 10)
print(" 计算器已关闭")
print("✨" * 10)

🔧 常见错误处理
错误1:输入非数字
# 错误示例
num = input("请输入数字:")
result = num + 10 # ❌ 会出错,因为num是字符串
# 正确做法
try:
num = float(input("请输入数字:"))
result = num + 10
print(f"结果:{result}")
except ValueError:
print("❌ 错误:请输入有效的数字!")
错误2:除零错误
# 错误示例
num1 = float(input("被除数:"))
num2 = float(input("除数:"))
result = num1 / num2 # ❌ 如果num2=0会出错
# 正确做法
num1 = float(input("被除数:"))
num2 = float(input("除数:"))
if num2 == 0:
print("❌ 错误:除数不能为0!")
else:
result = num1 / num2
print(f"结果:{result}")
错误3:无效运算符
# 错误示例
op = input("运算符:")
result = num1 op num2 # ❌ Python不能这样用
# 正确做法
if op == "+":
result = num1 + num2
elif op == "-":
result = num1 - num2
elif op == "*":
result = num1 * num2
elif op == "/":
if num2 != 0:
result = num1 / num2
else:
print("除数不能为0!")
else:
print("❌ 无效的运算符!")
📅 下节课预告
第8课:随机数魔法——制作抽奖程序
下节课你将学习:
- 使用random模块生成随机数
- 制作抽奖和抽签程序
- 制作掷骰子游戏
- 制作随机密码生成器
- 制作随机选择题测试
提前准备:
- 想一想哪些地方用到了随机数
- 准备一些抽奖的奖品名称
- 想想你希望随机生成什么有趣的东西
💬 给家长的话
亲爱的家长:
今天孩子学习了如何制作计算器程序,这是将数学与编程结合的完美实践。
孩子今天学会了:
- ✅ 实现加减乘除运算
- ✅ 处理计算中的各种错误
- ✅ 制作实用的计算工具
- ✅ 添加记忆和历史功能
- ✅ 制作个性化界面
计算器的教育价值:
| 功能 | 数学知识 | 编程技能 | 实际应用 |
|------|---------|---------|---------|
| 四则运算 | 基本运算 | 条件判断 | 日常计算 |
| 错误处理 | 数学规则 | 异常处理 | 程序健壮性 |
| 实用工具 | 百分比、平均数 | 函数封装 | 实际问题解决 |
| 记忆功能 | 变量概念 | 状态管理 | 复杂计算 |
您可以这样做:
实际应用:
- 家庭记账:用孩子的计算器算家庭开销
- 作业检查:用Python验证数学作业答案
- 购物计算:比较商品价格,计算折扣
- 旅行计划:计算路程、时间、费用
创意扩展:
- 让孩子为爷爷奶奶制作大字版计算器
- 添加语音播报功能(用print模拟)
- 设计特别的皮肤和主题
- 添加常用公式计算
温馨提示:
- 鼓励孩子用自制的计算器解决实际问题
- 关注错误处理的学习,这是重要的编程习惯
- 分享孩子的计算器给家人使用
- 保存计算器程序,后续可以不断升级
🏆 今日成就
完成了今天的学习,你:
🧮 创造了功能完整的计算器
🔧 掌握了错误处理技巧
🎨 设计了个性化界面
🛠️ 制作了实用计算工具
🎮 开发了数学游戏
挑战任务:
- 为计算器添加平方、开方功能
- 实现计算历史保存到文件
- 添加语音提示功能
- 设计一个科学计算器模式
🌟 编程心法
计算是编程的基础
运算符是工具
变量是记忆
判断是逻辑
循环是耐心
错误处理是智慧
从简单到复杂
从工具到伙伴
让你的代码能计算
让你的程序能思考
记住:今天你创造的不只是一个工具,而是一个能帮你解决问题的智能助手。这是编程改变生活的开始!
第7课结束。你现在已经能制作实用的计算器了!
实践任务:
1. 为家人制作一个买菜计算器
2. 用Python计算器检查数学作业
3. 设计一个特别的单位换算器
4. 创造你的专属数学游戏
下节课,让我们一起探索随机数的魔法!
第8课见!🎲