Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

数值变量与操作

引言:生活中的数字

小明,你有没有想过,我们每天要和多少数字打交道?

  • 📅 早上7:30起床,7:50出门
  • 🚶 从家走到学校需要15分钟
  • 📝 语文考了85分,数学考了92分
  • 🛒 买一支铅笔5元,买一个本子12元
  • 🎮 游戏里你已经升到了15级

数字帮我们:

  • 📊 统计和比较:谁考得好?谁长得高?
  • 💰 计算和管理:买东西要付多少钱?零花钱够不够?
  • 📐 测量和描述:距离、时间、重量、温度
  • 🎯 解决问题:平均分是多少?还差多少分?

在这一章,我们将学习:

  • 什么是整数小数
  • 如何用Python做数学运算
  • 计算机是如何存储和计算数字的
  • 用编程解决数学应用题

👨‍🏫 给家长的辅导建议:

  • 这一章是数学和编程结合的重点章节
  • 建议让孩子先回忆数学课学过的内容:整数、小数、四则运算
  • 可以用生活中的场景引导:购物计算、时间计算、测量等
  • 本章融入了计算机如何存储数字的知识,这是理解计算机工作原理的基础
  • 如果孩子在某些数学概念上不太清楚,可以借此机会复习

数值的类型

在Python中,数字主要有两种类型:整数小数

1. 整数(int) - 完整的数字

整数就是没有小数部分的数字,可以是正数、负数或零。

# 正整数 - 计数、年龄、等级
age = 10              # 年龄
height_cm = 145       # 身高(厘米)
score = 95            # 分数
level = 8             # 游戏等级

# 负整数 - 欠款、温度零下、反向
temperature = -5      # 零下5度
balance = -100        # 欠款100元
elevator = -3         # 地下3层

# 零
zero = 0

💡 思考一下:

  • 为什么年龄用整数?你会说“我10岁半“吗?
  • 为什么温度可以是负数?温度计上负数在哪边?

👨‍🏫 给家长的知识补充:

  • int 是 integer(整数)的缩写
  • 整数用于计数场景(人数、物品数)和离散数据(年龄、等级)
  • 生活中大多数计数都是整数,你不能有“2.5个人“

🖥️ 计算机如何存储整数?

计算机用二进制(0和1)来存储数字。这里有一个简单的理解方式:

想象你有几个开关,每个开关只有“开“(1)和“关“(0)两种状态:

十进制 0  →  二进制 0000
十进制 1  →  二进制 0001
十进制 2  →  二进制 0010
十进制 3  →  二进制 0011
十进制 4  →  二进制 0100
十进制 5  →  二进制 0101
...
十进制 10 →  二进制 1010

👨‍🏫 给家长的讲解建议:

  • 小学阶段不需要深入理解二进制转换
  • 重点让孩子知道:计算机用0和1表示所有数字
  • 可以用“手指计数“类比:我们用10个手指计数(十进制),计算机用“开关“计数(二进制)
  • 4个开关可以表示0-15的数字(2⁴=16种可能)
  • 这就是为什么计算机存储容量是2、4、8、16、32、64等数字

2. 小数(float) - 精确的数字

小数也叫“浮点数“(float),是带小数点的数字。

# 测量数据 - 身高、体重、温度
height = 1.45         # 身高1.45米
weight = 38.5         # 体重38.5公斤
temperature = 36.5    # 体温36.5度

# 价格 - 金钱计算
price = 9.99          # 价格9.99元
discount = 0.85       # 8.5折扣

# 数学常数
pi = 3.14159          # 圆周率

# 科学计数法(表示很大或很小的数)
big_number = 3.14e10      # 3.14 × 10¹⁰ (314亿)
small_number = 1.23e-5    # 1.23 × 10⁻⁵ (0.0000123)

💡 思考一下:

  • 为什么身高用小数?(因为人在不断长高,可能是1.45米、1.46米…)
  • 为什么价格用小数?(因为金额需要精确,9.99元不等于10元)

👨‍🏫 给家长的知识补充:

  • float 是“浮点数“(floating point number)的缩写
  • “浮点“是因为小数点可以“浮动“到不同位置
  • 小数用于测量场景和连续数据
  • 重要:计算机中的小数可能有微小误差
    print(0.1 + 0.2)  # 输出: 0.30000000000000004
    
    这是因为计算机用二进制表示小数,有些十进制小数无法精确表示(类似1/3=0.333…) 暂时不需要深入理解原理,孩子只要知道“小数可能有微小误差“即可

🖥️ 小数在内存中的占用

  • 整数(int):通常占用4字节或8字节,取决于数字大小
  • 小数(float):通常占用8字节,可以表示很大范围的数字

可以简单理解为:

  • 整数盒子比较固定,装整数刚刚好
  • 小数盒子需要更复杂的结构,所以占用空间更大

判断数值类型

我们可以用 type() 函数查看一个变量的类型:

# 查看类型
i = 10
f = 3.14

print(type(i))  # 输出:<class 'int'>
print(type(f))  # 输出:<class 'float'>

# 判断类型
print(type(i) == int)    # 输出:True
print(type(f) == float)  # 输出:True

👨‍🏫 给家长的讲解建议:

  • type() 函数可以帮助检查变量的类型
  • 如果孩子觉得 type(i) == int 太复杂,可以暂时不学
  • 重点让孩子知道:整数是 int,小数是 float

数学练习:应用题入门

在深入学习运算之前,让我们先看看如何用编程解决数学应用题。

练习1:年龄问题

问题:小明今年10岁,爸爸今年38岁。5年后,爸爸比小明大多少岁?

思路:

  • 5年后小明的年龄 = 10 + 5
  • 5年后爸爸的年龄 = 38 + 5
  • 年龄差 = 爸爸的年龄 - 小明的年龄
# 现在的年龄
xiaoming = 10
dad = 38

# 5年后的年龄
years = 5
xiaoming_future = xiaoming + years
dad_future = dad + years

# 计算年龄差
diff = dad_future - xiaoming_future

print(f"现在:小明{xiaoming}岁,爸爸{dad}岁")
print(f"5年后:小明{xiaoming_future}岁,爸爸{dad_future}岁")
print(f"年龄差:{diff}岁")

运行结果:

现在:小明10岁,爸爸38岁
5年后:小明15岁,爸爸43岁
年龄差:28岁

💡 思考一下:

  • 为什么要先算各自的年龄,再算差值?
  • 能不能直接用 38 - 10?为什么?

👨‍🏫 给家长的教学提示:

  • 这是典型的“年龄问题“
  • 关键点:年龄差永远不变
  • 可以让孩子先口算,再用编程验证
  • 扩展练习:两人年龄和是多少?多少年前爸爸年龄是小明的3倍?

练习2:价格问题

问题:一支铅笔5元,一个本子12元。买3支铅笔和2个本子,一共多少钱?

思路:

  • 铅笔总价 = 单价 × 数量
  • 本子总价 = 单价 × 数量
  • 总金额 = 铅笔总价 + 本子总价
# 单价
pencil_price = 5
notebook_price = 12

# 数量
pencil_count = 3
notebook_count = 2

# 计算
pencil_total = pencil_price * pencil_count
notebook_total = notebook_price * notebook_count
total = pencil_total + notebook_total

print(f"铅笔:{pencil_price}元 × {pencil_count} = {pencil_total}元")
print(f"本子:{notebook_price}元 × {notebook_count} = {notebook_total}元")
print(f"合计:{total}元")

运行结果:

铅笔:5元 × 3 = 15元
本子:12元 × 2 = 24元
合计:39元

💡 思考一下:

  • 如果有50元,够不够买?还剩多少?
  • 如果所有商品打8折,要付多少钱?

👨‍🏫 给家长的教学提示:

  • 这是“总价 = 单价 × 数量“的基础应用
  • 可以扩展到购物场景:带100元买东西,够不够?
  • 逐步引导孩子理解:先算各项,再求和

练习3:速度问题

问题:小明从家走到学校,距离是1200米,他每分钟走80米。需要多少分钟?

思路:

  • 时间 = 距离 ÷ 速度
# 已知条件
distance = 1200  # 距离(米)
speed = 80       # 速度(米/分钟)

# 计算时间
time = distance / speed

print(f"距离:{distance}米")
print(f"速度:{speed}米/分钟")
print(f"需要时间:{time}分钟")

运行结果:

距离:1200米
速度:80米/分钟
需要时间:15.0分钟

💡 思考一下:

  • 为什么结果是15.0而不是15?(因为我们用了 / 除法)
  • 如果要15分钟,应该用什么运算?(用 // 整除)

👨‍🏫 给家长的教学提示:

  • 这是“路程、速度、时间“的三个基本关系:
    • 路程 = 速度 × 时间
    • 时间 = 路程 ÷ 速度
    • 速度 = 路程 ÷ 时间
  • 可以结合物理课或数学课的知识讲解
  • 注意单位的统一(米、千米、分钟、小时)

数值的基本运算

Python支持所有的基本数学运算。

算术运算符

a = 10
b = 3

# 加法 +
print(a + b)   # 输出:13

# 减法 -
print(a - b)   # 输出:7

# 乘法 *
print(a * b)   # 输出:30

# 除法 /(结果总是小数)
print(a / b)   # 输出:3.3333333333333335

# 整除 //(只保留整数部分)
print(a // b)  # 输出:3

# 求余数 %(模运算)
print(a % b)   # 输出:1(因为 10 = 3×3 + 1)

# 幂运算 **(乘方)
print(a ** b)  # 输出:1000(10的3次方)

💡 实物类比:

  • 整除 //:你有10颗糖,平均分给3个人,每人得3颗(整除)
  • 求余 %:你有10颗糖,分给3个人,每人3颗,还剩1颗(余数)
  • 幂运算 **:正方形的面积是边长的平方(5² = 5 × 5 = 25)

👨‍🏫 给家长的教学建议:

  • / 是普通除法,结果总是小数(float)
  • // 是整除,结果是整数(int),相当于数学中的“商“
  • % 是求余数,可以理解为“除不尽剩下的部分“
  • ** 是幂运算,2 ** 3 就是 2³ = 8
  • 重点:用分糖果、分蛋糕等实物类比,帮助孩子理解整除和余数

运算的优先级

和数学一样,Python的运算也有优先级:

# 先乘除,后加减
result = 2 + 3 * 4
print(result)  # 输出:14(不是20)

# 使用括号改变优先级
result = (2 + 3) * 4
print(result)  # 输出:20

# 幂运算优先级最高
result = 2 ** 3 * 4
print(result)  # 输出:32(先算2³=8,再算8×4)

# 同级运算从左到右
result = 10 - 3 - 2
print(result)  # 输出:5(先算10-3=7,再算7-2=5)

优先级顺序(从高到低):

  1. 括号 ()
  2. 幂运算 **
  3. 乘除 * / // %
  4. 加减 + -

👨‍🏫 给家长的教学建议:

  • 建议孩子多使用括号,即使不是必须的,也可以让代码更清晰
  • 如果不确定优先级,就用括号明确表示
  • 可以和数学课学的运算优先级对比,帮助理解

🖥️ 计算机的计算能力

你可能好奇,计算机计算有多快?让我们来测试一下!

测试1:计算速度对比

import time

# 测试1:简单的加法
start = time.time()
result = 0
for i in range(10000000):  # 一千万次
    result = result + 1
end = time.time()

print(f"计算机执行一千万次加法用时:{end - start:.4f}秒")
print(f"也就是每秒可以执行约:{10000000 / (end - start):.0f}次加法")

运行结果(根据计算机不同会有差异):

计算机执行一千万次加法用时:0.5123秒
也就是每秒可以执行约:19519837次加法

💡 也就是说:

  • 普通计算机每秒可以执行几千万次简单运算
  • 如果是人来做,每秒做1次加法,一千万次需要约4个月!
  • 这就是为什么计算机擅长做重复性工作

测试2:大数计算

# 计算很大的数字
big_number = 12345678901234567890 ** 100
print(f"计算大数的100次方...")
print(f"结果有{len(str(big_number))}位数字!")

👨‍🏫 给家长的知识补充:

  • CPU(中央处理器)是计算机的“大脑“,负责计算
  • CPU的主频表示每秒可以执行的周期数
    • 1 GHz = 每秒10亿次周期
    • 3 GHz = 每秒30亿次周期
  • 但不是说CPU每秒只能做30亿次运算
    • 现代CPU有多个“核心“(像有多个大脑)
    • 每个核心可以同时处理多个任务
    • 所以实际运算能力远超主频数字

实践1:基础计算器

让我们用学到的知识做一个多功能计算器:

# 基础计算器
print("=" * 40)
print("  🧮 小小计算器 🧮  ")
print("=" * 40)
print()

# 获取输入
num1 = input("请输入第一个数字:")
num2 = input("请输入第二个数字:")

# 转换成数值
num1 = float(num1)
num2 = float(num2)

# 计算
print()
print("📊 计算结果:")
print("-" * 35)
print(f"{num1} + {num2} = {num1 + num2}")
print(f"{num1} - {num2} = {num1 - num2}")
print(f"{num1} × {num2} = {num1 * num2}")
print(f"{num1} ÷ {num2} = {num1 / num2:.4f}")
print(f"{num1} 整除 {num2} = {num1 // num2}")
print(f"{num1} 余 {num2} = {num1 % num2}")
print(f"{num1} 的 {num2} 次方 = {num1 ** num2:.4f}")
print("-" * 35)

运行示例:

========================================
  🧮 小小计算器 🧮
========================================

请输入第一个数字:10
请输入第二个数字:3

📊 计算结果:
-----------------------------------
10.0 + 3.0 = 13.0
10.0 - 3.0 = 7.0
10.0 × 3.0 = 30.0
10.0 ÷ 3.0 = 3.3333
10.0 整除 3.0 = 3.0
10.0 余 3.0 = 1.0
10.0 的 3.0 次方 = 1000.0
-----------------------------------

👨‍🏫 给家长的教学建议:

  • 这里我们用 float() 而不是 int(),因为用户可能输入小数
  • f-string 让输出格式更清晰
  • 可以让孩子尝试输入不同的数字,观察结果
  • 可以讨论:为什么除法结果有很多小数?(因为 10/3 = 3.333… 无限循环)

数学函数

Python内置了一些数学函数,可以帮我们完成复杂的计算。

1. 绝对值、最大值、最小值

# 绝对值 - 数轴上的距离
print(abs(-5))    # 输出:5
print(abs(3.14))  # 输出:3.14
print(abs(0))     # 输出:0

# 最大值
print(max(1, 5, 3))      # 输出:5
print(max(10, 20, 30))   # 输出:30
print(max(-5, -2, -10))  # 输出:-2

# 最小值
print(min(1, 5, 3))      # 输出:1
print(min(10, 20, 30))   # 输出:10
print(min(-5, -2, -10))  # 输出:-10

# 也可以用于列表(后面会学)
numbers = [3, 1, 4, 1, 5]
print(max(numbers))  # 输出:5
print(min(numbers))  # 输出:1

💡 实物类比:

  • 绝对值:小明向东走了5米,小红向西走了5米,他们距离起点都是5米
  • 最大值:考试成绩,最高分是多少?
  • 最小值:气温记录,最低气温是多少?

👨‍🏫 给家长的教学建议:

  • abs 是 absolute value(绝对值)的缩写
  • 绝对值可以用“距离原点的距离“来解释:-5 到 0 的距离是 5
  • maxmin 可以接受多个数字或一个列表
  • 可以结合实际场景:班级最高身高、最低气温、最高分等

2. 四舍五入

# 四舍五入
print(round(3.14))      # 输出:3(默认保留整数)
print(round(3.5))       # 输出:4(.5会进位)
print(round(3.14159, 2))  # 输出:3.14(保留2位小数)
print(round(3.14159, 3))  # 输出:3.142(保留3位小数)
print(round(3.14159, 4))  # 输出:3.1416(保留4位小数)

# 负数也可以
print(round(-3.5))      # 输出:-4

# 金钱计算常用
price = 9.99
quantity = 3
total = price * quantity
print(f"总价:{total}元")           # 输出:总价:29.970000000000002元
print(f"总价:{round(total, 2)}元") # 输出:总价:29.97元

👨‍🏫 给家长的知识补充:

  • round() 的第二个参数是保留的小数位数
  • “四舍五入“在Python中其实是“银行家舍入”(.5会舍入到最近的偶数)
    • 例如:2.5 → 2,3.5 → 4(而不是2.5→3,3.5→4)
  • 这个细节孩子不需要深究,知道是四舍五入即可
  • 在金钱计算时,建议用 round(total, 2) 保留两位小数

3. 幂运算

# 幂运算(也可以用 **)
print(pow(2, 3))  # 输出:8(2的3次方)
print(pow(5, 2))  # 输出:25(5的2次方)
print(pow(10, 6)) # 输出:1000000(10的6次方)

# 平方根
print(4 ** 0.5)   # 输出:2.0(4的平方根)
print(9 ** 0.5)   # 输出:3.0(9的平方根)
print(16 ** 0.5)  # 输出:4.0(16的平方根)

💡 实际应用:

  • 平方:正方形的面积 = 边长²
  • 立方:正方体的体积 = 边长³
  • 平方根:如果一个正方形面积是16,边长是多少?(√16 = 4)

实践2:成绩统计器

让我们用学到的函数做一个成绩统计器:

# 成绩统计器
print("=" * 40)
print("  📊 成绩统计器 📊  ")
print("=" * 40)
print()

# 获取成绩
chinese = input("请输入语文成绩:")
math_score = input("请输入数学成绩:")
english = input("请输入英语成绩:")
science = input("请输入科学成绩:")

# 转换成数值
chinese = float(chinese)
math_score = float(math_score)
english = float(english)
science = float(science)

# 计算
total = chinese + math_score + english + science
average = total / 4
highest = max(chinese, math_score, english, science)
lowest = min(chinese, math_score, english, science)

# 输出
print()
print("📈 统计结果:")
print("-" * 35)
print(f"语文:{chinese:.1f}分")
print(f"数学:{math_score:.1f}分")
print(f"英语:{english:.1f}分")
print(f"科学:{science:.1f}分")
print("-" * 35)
print(f"总分:{total:.1f}分")
print(f"平均分:{average:.2f}分")
print(f"最高分:{highest:.1f}分")
print(f"最低分:{lowest:.1f}分")
print(f"总分差:{highest - lowest:.1f}分")
print("-" * 35)

运行示例:

========================================
  📊 成绩统计器 📊
========================================

请输入语文成绩:85
请输入数学成绩:92
请输入英语成绩:88
请输入科学成绩:90

📈 统计结果:
-----------------------------------
语文:85.0分
数学:92.0分
英语:88.0分
科学:90.0分
-----------------------------------
总分:355.0分
平均分:88.75分
最高分:92.0分
最低分:85.0分
总分差:7.0分
-----------------------------------

👨‍🏫 给家长的教学建议:

  • 这个练习综合运用了:输入输出、类型转换、四则运算、函数
  • 可以讨论:如果平均分低于60分,应该提示警告?(为第7章条件语句做铺垫)
  • 可以扩展:添加更多科目,计算排名等

练习1:温度转换器

任务:编写一个温度转换程序

  1. 询问用户摄氏温度
  2. 转换成华氏温度(公式:F = C × 1.8 + 32)
  3. 输出结果,保留一位小数
📝 点击查看提示

提示:

  • float() 获取小数温度
  • 使用公式计算
  • 用 f-string 格式化输出,如 {fahrenheit:.1f} 可以保留一位小数
📝 点击查看参考答案
# 温度转换器
print("=" * 40)
print("  🌡️ 温度转换器 🌡️  ")
print("=" * 40)
print()

# 获取摄氏温度
celsius = input("请输入摄氏温度:")
celsius = float(celsius)

# 转换成华氏温度
fahrenheit = celsius * 1.8 + 32

# 输出结果
print()
print(f"📍 {celsius}°C = {fahrenheit:.1f}°F")

运行示例:

========================================
  🌡️ 温度转换器 🌡️
========================================

请输入摄氏温度:25

📍 25.0°C = 77.0°F

👨‍🏫 给家长的教学建议:

  • .1f 表示保留1位小数,.2f 表示保留2位小数
  • 可以和孩子讨论:为什么用小数而不是整数?(因为温度可能是小数)
  • 可以扩展:添加华氏转摄氏的功能(C = (F - 32) / 1.8)
  • 这是“一次函数“的实际应用:y = ax + b

💡 数学知识:

  • 摄氏温度(°C)和华氏温度(°F)的换算关系
  • 这是一个线性关系,可以用一次函数表示
  • 0°C = 32°F(水的冰点)
  • 100°C = 212°F(水的沸点)

练习2:购物折扣计算器

任务:编写一个购物清单程序

  1. 询问3件商品的价格
  2. 计算总价
  3. 如果总价超过100元,打9折
  4. 输出原价、折扣、最终价格
📝 点击查看提示

提示:

  • float() 获取价格
  • if 语句判断是否打折(第7章会详细学)
  • 9折就是原价 × 0.9,或者减去10%
📝 点击查看参考答案
# 购物清单程序
print("=" * 40)
print("  🛒 购物清单 🛒  ")
print("=" * 40)
print()

# 获取价格
price1 = input("请输入第1件商品价格:")
price2 = input("请输入第2件商品价格:")
price3 = input("请输入第3件商品价格:")

# 转换成数值
price1 = float(price1)
price2 = float(price2)
price3 = float(price3)

# 计算总价
total = price1 + price2 + price3

# 判断折扣
discount = 0
final_price = total

if total > 100:
    discount = total * 0.1  # 9折就是减去10%
    final_price = total - discount
    print("🎉 恭喜!消费满100元,享受9折优惠!")

# 输出
print()
print("💰 账单:")
print("-" * 35)
print(f"商品1:¥{price1:.2f}")
print(f"商品2:¥{price2:.2f}")
print(f"商品3:¥{price3:.2f}")
print("-" * 35)
print(f"原价:¥{total:.2f}")
print(f"折扣:-¥{discount:.2f}")
print(f"最终:¥{final_price:.2f}")
print("-" * 35)

运行示例:

========================================
  🛒 购物清单 🛒
========================================

请输入第1件商品价格:35
请输入第2件商品价格:45
请输入第3件商品价格:30
🎉 恭喜!消费满100元,享受9折优惠!

💰 账单:
-----------------------------------
商品1:¥35.00
商品2:¥45.00
商品3:¥30.00
-----------------------------------
原价:¥110.00
折扣:-¥11.00
最终:¥99.00
-----------------------------------

👨‍🏫 给家长的教学建议:

  • 这个练习用到了条件语句(第7章内容)
  • 如果孩子还没学,可以先简化:不打折,只计算总价
  • 可以扩展:
    • 添加更多商品
    • 多级折扣(满100打9折,满200打8折)
    • 会员折扣
  • 这是“分段函数“的实际应用

💡 数学知识:

  • 折扣计算:原价 × 折扣率 = 折后价
  • 9折 = 90% = 0.9
  • 折扣金额 = 原价 × (1 - 折扣率)
  • 这是“百分比“的实际应用

数值的格式化输出

在输出数值时,我们可以控制它的显示格式。

1. 控制小数位数

pi = 3.1415926

# 保留2位小数
print(f"π ≈ {pi:.2f}")  # 输出:π ≈ 3.14

# 保留4位小数
print(f"π ≈ {pi:.4f}")  # 输出:π ≈ 3.1416

# 不保留小数
print(f"π ≈ {pi:.0f}")  # 输出:π ≈ 3

# 自动保留(不指定)
print(f"π = {pi}")  # 输出:π = 3.1415926

2. 对齐和宽度

number = 42

# 右对齐,宽度10
print(f"[{number:>10}]")  # 输出:[        42]

# 左对齐,宽度10
print(f"[{number:<10}]")  # 输出:[42        ]

# 居中,宽度10
print(f"[{number:^10}]")  # 输出:[    42    ]

# 小数也可以对齐
pi = 3.14
print(f"[{pi:^10.2f}]")  # 输出:[   3.14   ]

3. 添加千位分隔符

big_number = 1234567890

# 添加千位分隔符
print(f"{big_number:,}")  # 输出:1,234,567,890

# 小数也可以
price = 1234.56
print(f"¥{price:,.2f}")  # 输出:¥1,234.56

# 人口统计
population = 1400000000
print(f"中国人口约:{population:,}人")
# 输出:中国人口约约:1,400,000,000人

👨‍🏫 给家长的知识补充:

  • 格式化字符串的语法是 f"{变量:格式}"
  • :.2f 表示保留2位小数
  • :>10 表示右对齐,宽度10
  • :, 表示添加千位分隔符
  • 这些格式可以组合使用,如 :>10,.2f
  • 暂时不需要孩子记住所有格式,需要时再查阅

实践3:几何计算器

让我们做一个几何图形计算器,复习数学中的几何知识!

梯形计算器

问题:梯形的上底是5cm,下底是8cm,高是3cm,求面积和周长?

# 梯形计算器
print("=" * 45)
print("  📐 梯形计算器 📐  ")
print("=" * 45)
print()
print("梯形有四条边:上底、下底、两条腰")
print()

# 获取输入
top = input("请输入上底的长度(cm):")
bottom = input("请输入下底的长度(cm):")
left = input("请输入左侧腰的长度(cm):")
right = input("请输入右侧腰的长度(cm):")
height = input("请输入梯形的高度(cm):")

# 转换成数值
top = float(top)
bottom = float(bottom)
left = float(left)
right = float(right)
height = float(height)

# 计算
# 梯形面积公式:面积 = (上底 + 下底) × 高 ÷ 2
area = (top + bottom) * height / 2

# 梯形周长公式:周长 = 上底 + 下底 + 左腰 + 右腰
perimeter = top + bottom + left + right

# 输出
print()
print("📊 计算结果:")
print("-" * 40)
print(f"上底:{top:.2f} cm")
print(f"下底:{bottom:.2f} cm")
print(f"左腰:{left:.2f} cm")
print(f"右腰:{right:.2f} cm")
print(f"高度:{height:.2f} cm")
print("-" * 40)
print(f"面积:{area:.2f} cm²")
print(f"周长:{perimeter:.2f} cm")
print("-" * 40)

运行示例:

=============================================
  📐 梯形计算器 📐
=============================================

梯形有四条边:上底、下底、两条腰

请输入上底的长度(cm):5
请输入下底的长度(cm):8
请输入左侧腰的长度(cm):4
请输入右侧腰的长度(cm):4
请输入梯形的高度(cm):3

📊 计算结果:
----------------------------------------
上底:5.00 cm
下底:8.00 cm
左腰:4.00 cm
右腰:4.00 cm
高度:3.00 cm
----------------------------------------
面积:19.50 cm²
周长:21.00 cm
----------------------------------------

💡 数学知识:

  • 梯形面积公式:S = (a + b) × h ÷ 2
    • a = 上底,b = 下底,h = 高
  • 梯形周长公式:C = a + b + c + d
    • a = 上底,b = 下底,c = 左腰,d = 右腰

👨‍🏫 给家长的教学建议:

  • 可以用梯形图片或实物帮助孩子理解
  • 可以扩展:检查输入是否合理(如上底、下底、高度不能为负数)
  • 可以讨论:如果两条腰相等,是什么梯形?(等腰梯形)
  • 可以联系实际:梯形的河堤、梯形的田地等

圆形计算器

问题:一个圆的半径是5cm,求面积和周长?

# 圆形计算器
print("=" * 40)
print("  ⭕ 圆形计算器 ⭕  ")
print("=" * 40)
print()

# 获取半径
radius = input("请输入圆的半径(cm):")
radius = float(radius)

# 圆周率
pi = 3.141592653589793

# 计算
# 圆面积公式:面积 = π × 半径²
area = pi * radius ** 2

# 圆周长公式:周长 = 2 × π × 半径
circumference = 2 * pi * radius

# 输出
print()
print("📊 计算结果:")
print("-" * 35)
print(f"半径:{radius:.2f} cm")
print(f"圆周率π:{pi:.10f}")
print("-" * 35)
print(f"面积:{area:.2f} cm²")
print(f"周长:{circumference:.2f} cm")
print("-" * 35)

运行示例:

========================================
  ⭕ 圆形计算器 ⭕
========================================

请输入圆的半径(cm):5

📊 计算结果:
-----------------------------------
半径:5.00 cm
圆周率π:3.1415926536
-----------------------------------
面积:78.54 cm²
周长:31.42 cm
-----------------------------------

💡 数学知识:

  • 圆面积公式:S = πr²
    • π = 圆周率 ≈ 3.14
    • r = 半径
  • 圆周长公式:C = 2πr
    • 或者 C = πd(d = 直径)

👨‍🏫 给家长的教学建议:

  • π是一个无理数,无限不循环小数
  • 实际计算中通常取 π ≈ 3.14 或 π ≈ 3.1416
  • Python中的 math.pi 提供了更精确的π值(第13章会学)

常见错误和调试

在编程中,错误是学习的好机会!让我们看看常见的错误。

错误1:忘记类型转换

# ❌ 错误示例
a = input("请输入第一个数字:")
b = input("请输入第二个数字:")
print(a + b)  # 错误!这是字符串拼接,不是加法
# 如果输入10和3,会输出"103",而不是13

# ✅ 正确做法
a = input("请输入第一个数字:")
b = input("请输入第二个数字:")
a = float(a)  # 转换成数值
b = float(b)
print(a + b)  # 正确!这是数值加法

👨‍🏫 给家长的讲解建议:

  • 这是最常见的错误!
  • input() 总是返回字符串,即使输入的是数字
  • 必须用 int()float() 转换成数值才能计算
  • 让孩子亲自运行错误代码,理解为什么出错

错误2:整数除法vs小数除法

# 问题:想要得到整数的商
a = 10
b = 3

# ❌ 用普通除法
print(a / b)  # 输出:3.3333333333333335

# ✅ 用整除
print(a // b)  # 输出:3

# ✅ 或者用int()转换
print(int(a / b))  # 输出:3

👨‍🏫 给家长的讲解建议:

  • / 总是得到小数
  • 如果想要整数结果,用 //int()
  • 根据实际需求选择合适的方法

错误3:小数精度问题

# 小数可能有微小误差
print(0.1 + 0.2)
# 输出:0.30000000000000004
# 而不是我们期待的0.3

# ✅ 解决方法1:四舍五入
result = 0.1 + 0.2
print(round(result, 2))  # 输出:0.3

# ✅ 解决方法2:用整数计算(分转元)
fen_1 = 10  # 0.1元 = 10分
fen_2 = 20  # 0.2元 = 20分
total_fen = fen_1 + fen_2
total_yuan = total_fen / 100
print(total_yuan)  # 输出:0.3

👨‍🏫 给家长的讲解建议:

  • 这是计算机表示小数的方式造成的
  • 在金钱计算时,建议用“分“做单位,避免小数误差
  • 或者用 round() 四舍五入
  • 如果孩子觉得困惑,可以说“计算机有时候会有一点小误差“

章节小结

恭喜你完成了这一章!让我们回顾一下学到的内容。

📚 核心概念

  1. 整数(int):没有小数部分的数字,用于计数
  2. 小数(float):带小数点的数字,用于测量
  3. 算术运算:加+、减-、乘*、除/、整除//、求余%、幂**
  4. 运算优先级:括号 > 幂运算 > 乘除 > 加减

🛠️ 常用函数

  • abs(x):绝对值
  • max(a, b, c):最大值
  • min(a, b, c):最小值
  • round(x, n):四舍五入,保留n位小数
  • pow(x, y):x的y次方

🖥️ 计算机知识

  • 计算机用二进制(0和1)存储数字
  • CPU是计算机的“大脑“,负责计算
  • 现代CPU每秒可以执行数十亿次运算
  • 整数和小数在计算机中的存储方式不同

💡 数学知识应用

  • 年龄问题:年龄差永远不变
  • 价格问题:总价 = 单价 × 数量
  • 速度问题:时间 = 距离 ÷ 速度
  • 几何公式:
    • 梯形面积:S = (上底 + 下底) × 高 ÷ 2
    • 圆面积:S = πr²
    • 圆周长:C = 2πr

⚠️ 重要提示

  • / 是普通除法,// 是整除
  • % 是求余数
  • input() 得到的是字符串,需要转换成数值才能计算
  • 小数可能有微小精度误差,可以用 round() 解决

🎯 挑战练习

选择1-2个你感兴趣的题目完成!

1. 复利计算器 💰

输入本金、年利率、年数,计算复利。

  • 公式:最终金额 = 本金 × (1 + 利率)^年数
  • 例如:1000元,年利率5%,存3年,最终是多少?
💡 提示
  • 利率5%要写成0.05
  • ** 计算幂
📝 参考答案
# 复利计算器
print("=" * 40)
print("  💰 复利计算器 💰  ")
print("=" * 40)
print()

# 获取输入
principal = input("请输入本金(元):")
rate = input("请输入年利率(如5%输入5):")
years = input("请输入存款年数:")

# 转换
principal = float(principal)
rate = float(rate) / 100  # 5% → 0.05
years = int(years)

# 计算复利
amount = principal * (1 + rate) ** years
interest = amount - principal

# 输出
print()
print("📊 计算结果:")
print("-" * 35)
print(f"本金:¥{principal:.2f}")
print(f"年利率:{rate*100:.1f}%")
print(f"存款年数:{years}年")
print("-" * 35)
print(f"利息:¥{interest:.2f}")
print(f"本息合计:¥{amount:.2f}")
print("-" * 35)

💡 数学知识:

  • 复利公式:F = P(1 + r)^n
    • F = 未来金额(Future Value)
    • P = 本金(Principal)
    • r = 利率(Rate)
    • n = 期数(Number of periods)
  • 复利是“利滚利“,利息也会产生利息

2. BMI计算器 ⚖️

输入身高和体重,计算BMI,并判断是否正常。

  • 公式:BMI = 体重 ÷ 身高²
  • 判断标准:
    • BMI < 18.5:偏瘦
    • 18.5 ≤ BMI < 24:正常
    • BMI ≥ 24:偏胖
💡 提示
  • 身高单位是米,不是厘米
  • 用条件语句判断(第7章会详细学)
📝 参考答案
# BMI计算器
print("=" * 40)
print("  ⚖️ BMI计算器 ⚖️  ")
print("=" * 40)
print()

# 获取输入
height = input("请输入身高(米):")
weight = input("请输入体重(公斤):")

# 转换
height = float(height)
weight = float(weight)

# 计算BMI
bmi = weight / (height ** 2)

# 判断
if bmi < 18.5:
    status = "偏瘦"
elif bmi < 24:
    status = "正常"
else:
    status = "偏胖"

# 输出
print()
print("📊 计算结果:")
print("-" * 35)
print(f"身高:{height:.2f} 米")
print(f"体重:{weight:.1f} 公斤")
print("-" * 35)
print(f"BMI指数:{bmi:.1f}")
print(f"健康状态:{status}")
print("-" * 35)

💡 数学知识:

  • BMI = Body Mass Index(身体质量指数)
  • 是衡量一个人胖瘦的标准
  • 公式:BMI = 体重 ÷ 身高²
  • 注意单位:体重用kg,身高用m

3. 找零计算器 💵

输入商品价格和支付金额,计算应该找多少零钱。

  • 尽量用大面额纸币(100元、50元、20元、10元、5元、1元)
  • 例如:商品123元,支付200元,找77元(50+20+5+1+1)
💡 提示
  • 用整除和求余计算各种面额的数量
  • 77 ÷ 50 = 1余27 → 1张50元
  • 27 ÷ 20 = 1余7 → 1张20元
📝 参考答案
# 找零计算器
print("=" * 40)
print("  💵 找零计算器 💵  ")
print("=" * 40)
print()

# 获取输入
price = input("请输入商品价格(元):")
paid = input("请输入支付金额(元):")

# 转换
price = float(price)
paid = float(paid)

# 计算找零
change = paid - price

# 计算各种面额
change_100 = int(change // 100)
change = change % 100

change_50 = int(change // 50)
change = change % 50

change_20 = int(change // 20)
change = change % 20

change_10 = int(change // 10)
change = change % 10

change_5 = int(change // 5)
change = change % 5

change_1 = int(change // 1)
change = change % 1

# 输出
print()
print("📊 找零方案:")
print("-" * 35)
print(f"商品价格:¥{price:.2f}")
print(f"支付金额:¥{paid:.2f}")
print(f"找零总额:¥{paid - price:.2f}")
print("-" * 35)
if change_100 > 0:
    print(f"100元纸币:{change_100}张")
if change_50 > 0:
    print(f"50元纸币:{change_50}张")
if change_20 > 0:
    print(f"20元纸币:{change_20}张")
if change_10 > 0:
    print(f"10元纸币:{change_10}张")
if change_5 > 0:
    print(f"5元纸币:{change_5}张")
if change_1 > 0:
    print(f"1元硬币:{change_1}枚")
print("-" * 35)

💡 数学知识:

  • 这是“贪心算法“的简单应用
  • 每次尽量用最大面额
  • 用整除得到数量,用求余得到剩余金额

🎉 给家长的教学建议

教学重点

  1. 整数和小数的区别:什么时候用整数,什么时候用小数
  2. 类型转换:这是最容易出错的地方,要强调
  3. 整除和求余:对孩子来说比较抽象,需要用实物类比
  4. 运算优先级:可以用数学课的知识对比
  5. 数学融入:通过编程复习数学知识,一举两得

常见问题及解答

Q1: 什么时候用整数,什么时候用小数?

  • A: 计数、年龄、排名用整数;测量、价格、精确计算用小数。

Q2: 为什么 10 / 3 结果不是整数?

  • A: 因为 / 是普通除法,结果总是小数。如果想要整数,用 // 整除。

Q3: 求余数有什么用?

  • A: 可以用来判断能不能整除、判断奇数偶数、分东西等。

Q4: 为什么小数计算会有误差?

  • A: 这是计算机表示小数的方式造成的。如果需要精确计算,可以用 decimal 模块(进阶内容)。

Q5: 如何判断孩子是否掌握了?

  • A: 看孩子能否独立完成:
    • 基础计算器
    • 至少一个应用题练习
    • 理解为什么要类型转换

练习建议

  • 基础练习:让孩子用数值计算制作各种“计算器“

    • 温度转换
    • 货币兑换
    • 成绩统计
  • 生活应用:

    • 购物:计算总价、折扣
    • 烹饪:食谱换算(2人份→4人份)
    • 运动:步数、距离、速度
  • 数学复习:

    • 用编程验证数学题的答案
    • 把数学应用题写成程序
    • 用程序生成数学练习题

下一步学习

完成这一章后,孩子应该:

  • ✅ 理解整数和小数的区别
  • ✅ 掌握基本的算术运算
  • ✅ 能解决简单的数学应用题
  • ✅ 了解计算机如何存储和计算数字

下一章,我们将学习布尔变量(Bool),这是编程中做判断的基础!

  • 什么是“真“和“假“
  • 如何比较大小
  • 如何进行逻辑判断
  • 为学习条件语句做准备

🔗 下一章:Bool变量与条件判断

在下一章中,我们将学习:

  • 什么是布尔值(True和False)
  • 比较运算符(>、<、==、!=)
  • 逻辑运算符(与、或、非)
  • 布尔值在判断中的应用

数值帮我们处理计算,布尔值帮我们做判断。两者结合起来,我们就可以编写更智能的程序了!