第7课:小小计算器——让电脑做数学

🎯 本课目标

  • 制作完整的四则运算计算器
  • 掌握加减乘除、取余、整除运算
  • 实现连续计算功能
  • 添加错误处理(如除零错误)
  • 制作用户友好的交互界面
  • 综合运用前6课知识

🧮 趣味引入:每个人都需要计算器

想一想:你什么时候需要计算器?

  • 做数学作业时 ✓
  • 算零花钱时 ✓
  • 购物算总价时 ✓
  • 做饭量材料时 ✓
  • 玩游戏算分时 ✓

今天,我们不只用计算器,还要创造一个属于自己的计算器!让它有你喜欢的颜色、特殊的功能,甚至能记住你的计算习惯!


🔢 第一部分:基础运算函数

在制作完整计算器前,先学习每种运算的实现。

1. 加法计算器

# 加法计算器
print("➕ 加法计算器")
print("=" * 20)

num1 = float(input("请输入第一个数:"))
num2 = float(input("请输入第二个数:"))

result = num1 + num2

print(f"{num1} + {num2} = {result}")
print(f"计算完成!结果是:{result}")

alt text

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}")

alt text

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

alt text

项目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("没有商品信息!")

alt text

工具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("❌ 算式格式错误!")

alt text

游戏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("💪 加油!多练习会更好!")

alt text


🎨 项目:我的个性化计算器

# 我的个性化计算器
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)

alt text


🔧 常见错误处理

错误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课:随机数魔法——制作抽奖程序

下节课你将学习:

  1. 使用random模块生成随机数
  2. 制作抽奖和抽签程序
  3. 制作掷骰子游戏
  4. 制作随机密码生成器
  5. 制作随机选择题测试

提前准备

  • 想一想哪些地方用到了随机数
  • 准备一些抽奖的奖品名称
  • 想想你希望随机生成什么有趣的东西

💬 给家长的话

亲爱的家长

今天孩子学习了如何制作计算器程序,这是将数学与编程结合的完美实践。

孩子今天学会了

  1. ✅ 实现加减乘除运算
  2. ✅ 处理计算中的各种错误
  3. ✅ 制作实用的计算工具
  4. ✅ 添加记忆和历史功能
  5. ✅ 制作个性化界面

计算器的教育价值

| 功能 | 数学知识 | 编程技能 | 实际应用 |

|------|---------|---------|---------|

| 四则运算 | 基本运算 | 条件判断 | 日常计算 |

| 错误处理 | 数学规则 | 异常处理 | 程序健壮性 |

| 实用工具 | 百分比、平均数 | 函数封装 | 实际问题解决 |

| 记忆功能 | 变量概念 | 状态管理 | 复杂计算 |

您可以这样做

实际应用

  1. 家庭记账:用孩子的计算器算家庭开销
  2. 作业检查:用Python验证数学作业答案
  3. 购物计算:比较商品价格,计算折扣
  4. 旅行计划:计算路程、时间、费用

创意扩展

  1. 让孩子为爷爷奶奶制作大字版计算器
  2. 添加语音播报功能(用print模拟)
  3. 设计特别的皮肤和主题
  4. 添加常用公式计算

温馨提示

  • 鼓励孩子用自制的计算器解决实际问题
  • 关注错误处理的学习,这是重要的编程习惯
  • 分享孩子的计算器给家人使用
  • 保存计算器程序,后续可以不断升级

🏆 今日成就

完成了今天的学习,你:

🧮 创造了功能完整的计算器

🔧 掌握了错误处理技巧

🎨 设计了个性化界面

🛠️ 制作了实用计算工具

🎮 开发了数学游戏

挑战任务

  1. 为计算器添加平方、开方功能
  2. 实现计算历史保存到文件
  3. 添加语音提示功能
  4. 设计一个科学计算器模式

🌟 编程心法

计算是编程的基础
运算符是工具
变量是记忆
判断是逻辑
循环是耐心
错误处理是智慧
从简单到复杂
从工具到伙伴
让你的代码能计算
让你的程序能思考

记住:今天你创造的不只是一个工具,而是一个能帮你解决问题的智能助手。这是编程改变生活的开始!


第7课结束。你现在已经能制作实用的计算器了!

实践任务:

1. 为家人制作一个买菜计算器

2. 用Python计算器检查数学作业

3. 设计一个特别的单位换算器

4. 创造你的专属数学游戏

下节课,让我们一起探索随机数的魔法!

第8课见!🎲