第19课:单位转换器——让编程解决实际问题
🎯 本课目标
- 学习常见单位之间的转换关系
- 掌握长度单位的转换方法
- 学会重量单位的转换计算
- 理解温度单位的转换公式
- 制作多功能单位转换器
📏 趣味引入:成为"单位转换小专家"
想象一下:生活中处处需要单位转换:
- 📏 身高:妈妈说你120厘米,但美国表弟问"多少英尺?"
- ⚖️ 体重:医生说45千克,但买的进口食品标着"磅"
- 🌡️ 温度:天气预报说25°C,但爸爸说"多少华氏度?"
- 📏 距离:去旅行,地图显示5千米,但出租车说"多少英里?"
今天,让我们一起成为单位转换小专家,用Python解决这些实际问题!
🔧 第一部分:基础单位转换
1.1 简单转换函数
# 基础单位转换函数
print("🔧 基础单位转换函数")
print("=" * 40)
def meter_to_centimeter(meters):
"""米转换为厘米"""
return meters * 100
def centimeter_to_meter(centimeters):
"""厘米转换为米"""
return centimeters / 100
def kilogram_to_gram(kilograms):
"""千克转换为克"""
return kilograms * 1000
def gram_to_kilogram(grams):
"""克转换为千克"""
return grams / 1000
# 测试转换函数
print("\n📊 转换测试:")
print(f"1米 = {meter_to_centimeter(1)}厘米")
print(f"100厘米 = {centimeter_to_meter(100)}米")
print(f"1千克 = {kilogram_to_gram(1)}克")
print(f"1000克 = {gram_to_kilogram(1000)}千克")
# 实际应用示例
print("\n🎯 实际应用:")
height_cm = 152
print(f"小明的身高:{height_cm}厘米 = {centimeter_to_meter(height_cm)}米")
weight_kg = 45
print(f"小红的体重:{weight_kg}千克 = {kilogram_to_gram(weight_kg)}克")
# 让用户输入转换
user_height = float(input("\n请输入你的身高(厘米):"))
print(f"你的身高是:{user_height}厘米 = {centimeter_to_meter(user_height):.2f}米")
1.2 更多基础转换
# 更多基础转换函数
print("\n📊 更多基础单位转换")
print("=" * 40)
def kilometer_to_meter(kilometers):
"""千米转换为米"""
return kilometers * 1000
def meter_to_kilometer(meters):
"""米转换为千米"""
return meters / 1000
def hour_to_minute(hours):
"""小时转换为分钟"""
return hours * 60
def minute_to_hour(minutes):
"""分钟转换为小时"""
return minutes / 60
def minute_to_second(minutes):
"""分钟转换为秒"""
return minutes * 60
def second_to_minute(seconds):
"""秒转换为分钟"""
return seconds / 60
# 实际应用
print("\n🎯 日常生活中的转换:")
# 上学距离
school_distance_km = 1.5
print(f"上学距离:{school_distance_km}千米")
print(f" = {kilometer_to_meter(school_distance_km)}米")
print(f" = {kilometer_to_meter(school_distance_km) * 100}厘米")
# 上课时间
class_hours = 0.75 # 45分钟
print(f"\n一节课时间:{class_hours}小时")
print(f" = {hour_to_minute(class_hours)}分钟")
print(f" = {minute_to_second(hour_to_minute(class_hours))}秒")
# 运动时间
sport_minutes = 30
print(f"\n运动时间:{sport_minutes}分钟")
print(f" = {minute_to_hour(sport_minutes):.2f}小时")
print(f" = {minute_to_second(sport_minutes)}秒")
# 交互式转换
print("\n🔢 试试你自己的转换:")
while True:
print("\n选择转换类型:")
print("1. 千米 ↔ 米")
print("2. 小时 ↔ 分钟")
print("3. 退出")
choice = input("请选择 (1-3): ")
if choice == "3":
print("👋 再见!")
break
try:
value = float(input("请输入数值: "))
if choice == "1":
result_km_to_m = kilometer_to_meter(value)
result_m_to_km = meter_to_kilometer(value)
print(f"{value}千米 = {result_km_to_m}米")
print(f"{value}米 = {result_m_to_km:.3f}千米")
elif choice == "2":
result_h_to_m = hour_to_minute(value)
result_m_to_h = minute_to_hour(value)
print(f"{value}小时 = {result_h_to_m}分钟")
print(f"{value}分钟 = {result_m_to_h:.2f}小时")
except ValueError:
print("❌ 请输入数字!")
📏 第二部分:长度单位转换
2.1 国际单位制转换
# 国际长度单位转换
print("📏 国际长度单位转换")
print("=" * 50)
def convert_length(value, from_unit, to_unit):
"""
长度单位转换
参数:
value: 数值
from_unit: 原单位 ('mm', 'cm', 'm', 'km')
to_unit: 目标单位 ('mm', 'cm', 'm', 'km')
返回:
转换后的数值
"""
# 先转换为基本单位(米)
if from_unit == "mm": # 毫米
base_value = value / 1000
elif from_unit == "cm": # 厘米
base_value = value / 100
elif from_unit == "m": # 米
base_value = value
elif from_unit == "km": # 千米
base_value = value * 1000
else:
return "❌ 不支持的单位"
# 从基本单位转换为目标单位
if to_unit == "mm":
return base_value * 1000
elif to_unit == "cm":
return base_value * 100
elif to_unit == "m":
return base_value
elif to_unit == "km":
return base_value / 1000
else:
return "❌ 不支持的单位"
# 转换示例
print("\n📊 长度单位换算表:")
print("-" * 40)
print("1 千米 (km) = 1000 米 (m)")
print("1 米 (m) = 100 厘米 (cm)")
print("1 厘米 (cm) = 10 毫米 (mm)")
print("\n🎯 实际转换示例:")
# 身高转换
height_cm = 155
height_m = convert_length(height_cm, "cm", "m")
height_mm = convert_length(height_cm, "cm", "mm")
print(f"\n👤 身高转换:")
print(f"{height_cm}厘米 = {height_m}米")
print(f"{height_cm}厘米 = {height_mm}毫米")
# 距离转换
distance_km = 3.5
distance_m = convert_length(distance_km, "km", "m")
distance_cm = convert_length(distance_km, "km", "cm")
print(f"\n📍 距离转换:")
print(f"{distance_km}千米 = {distance_m}米")
print(f"{distance_km}千米 = {distance_cm}厘米")
# 文具长度
pencil_length_mm = 180
pencil_length_cm = convert_length(pencil_length_mm, "mm", "cm")
pencil_length_m = convert_length(pencil_length_mm, "mm", "m")
print(f"\n✏️ 铅笔长度:")
print(f"{pencil_length_mm}毫米 = {pencil_length_cm}厘米")
print(f"{pencil_length_mm}毫米 = {pencil_length_m}米")
2.2 英制单位转换
# 英制长度单位转换
print("\n📏 英制长度单位转换")
print("=" * 50)
def convert_imperial_length(value, from_unit, to_unit):
"""
英制长度单位转换
支持单位:英寸(in)、英尺(ft)、码(yd)、英里(mi)
转换关系:
1 英尺 = 12 英寸
1 码 = 3 英尺
1 英里 = 1760 码
"""
# 先转换为英寸
if from_unit == "in": # 英寸
base_value = value
elif from_unit == "ft": # 英尺
base_value = value * 12
elif from_unit == "yd": # 码
base_value = value * 36
elif from_unit == "mi": # 英里
base_value = value * 63360
else:
return "❌ 不支持的单位"
# 转换为目标单位
if to_unit == "in":
return base_value
elif to_unit == "ft":
return base_value / 12
elif to_unit == "yd":
return base_value / 36
elif to_unit == "mi":
return base_value / 63360
else:
return "❌ 不支持的单位"
def metric_to_imperial(value, from_unit, to_unit):
"""
公制转英制
from_unit: 'mm', 'cm', 'm', 'km'
to_unit: 'in', 'ft', 'yd', 'mi'
"""
# 公制转英制转换系数
# 1 英寸 = 2.54 厘米
# 1 英尺 = 30.48 厘米
# 1 码 = 0.9144 米
# 1 英里 = 1.609344 千米
# 先转换为厘米
if from_unit == "mm":
cm_value = value / 10
elif from_unit == "cm":
cm_value = value
elif from_unit == "m":
cm_value = value * 100
elif from_unit == "km":
cm_value = value * 100000
else:
return "❌ 不支持的单位"
# 转换为英制
if to_unit == "in": # 英寸
return cm_value / 2.54
elif to_unit == "ft": # 英尺
return cm_value / 30.48
elif to_unit == "yd": # 码
return (cm_value / 100) / 0.9144
elif to_unit == "mi": # 英里
return (cm_value / 100000) / 1.609344
else:
return "❌ 不支持的单位"
def imperial_to_metric(value, from_unit, to_unit):
"""
英制转公制
from_unit: 'in', 'ft', 'yd', 'mi'
to_unit: 'mm', 'cm', 'm', 'km'
"""
# 先转换为英寸
if from_unit == "in":
inches = value
elif from_unit == "ft":
inches = value * 12
elif from_unit == "yd":
inches = value * 36
elif from_unit == "mi":
inches = value * 63360
else:
return "❌ 不支持的单位"
# 转换为厘米
cm_value = inches * 2.54
# 转换为目标公制单位
if to_unit == "mm":
return cm_value * 10
elif to_unit == "cm":
return cm_value
elif to_unit == "m":
return cm_value / 100
elif to_unit == "km":
return cm_value / 100000
else:
return "❌ 不支持的单位"
# 转换示例
print("\n📊 英制单位换算表:")
print("-" * 40)
print("1 英尺 (ft) = 12 英寸 (in)")
print("1 码 (yd) = 3 英尺 (ft)")
print("1 英里 (mi) = 1760 码 (yd)")
print("\n📊 公制-英制换算:")
print("-" * 40)
print("1 英寸 = 2.54 厘米")
print("1 英尺 = 30.48 厘米")
print("1 码 = 0.9144 米")
print("1 英里 = 1.609 千米")
print("\n🎯 实际转换示例:")
# 身高转换
height_cm = 155
height_in = metric_to_imperial(height_cm, "cm", "in")
height_ft = metric_to_imperial(height_cm, "cm", "ft")
print(f"\n👤 身高转换(公制→英制):")
print(f"{height_cm}厘米 = {height_in:.1f}英寸")
print(f"{height_cm}厘米 = {height_ft:.2f}英尺")
# 反向转换
height_in_input = 61
height_cm_back = imperial_to_metric(height_in_input, "in", "cm")
print(f"\n👤 身高转换(英制→公制):")
print(f"{height_in_input}英寸 = {height_cm_back:.1f}厘米")
# 距离转换
distance_km = 5
distance_mi = metric_to_imperial(distance_km, "km", "mi")
print(f"\n📍 跑步距离:")
print(f"{distance_km}千米 = {distance_mi:.2f}英里")
# 篮球场尺寸
court_length_ft = 94
court_length_m = imperial_to_metric(court_length_ft, "ft", "m")
print(f"\n🏀 篮球场长度:")
print(f"{court_length_ft}英尺 = {court_length_m:.2f}米")
⚖️ 第三部分:重量单位转换
3.1 公制重量转换
# 公制重量单位转换
print("⚖️ 公制重量单位转换")
print("=" * 50)
def convert_weight(value, from_unit, to_unit):
"""
公制重量单位转换
支持单位:毫克(mg)、克(g)、千克(kg)、吨(t)
转换关系:
1 克 = 1000 毫克
1 千克 = 1000 克
1 吨 = 1000 千克
"""
# 先转换为克
if from_unit == "mg": # 毫克
base_value = value / 1000
elif from_unit == "g": # 克
base_value = value
elif from_unit == "kg": # 千克
base_value = value * 1000
elif from_unit == "t": # 吨
base_value = value * 1000000
else:
return "❌ 不支持的单位"
# 转换为目标单位
if to_unit == "mg":
return base_value * 1000
elif to_unit == "g":
return base_value
elif to_unit == "kg":
return base_value / 1000
elif to_unit == "t":
return base_value / 1000000
else:
return "❌ 不支持的单位"
# 转换示例
print("\n📊 重量单位换算表:")
print("-" * 40)
print("1 吨 (t) = 1000 千克 (kg)")
print("1 千克 (kg) = 1000 克 (g)")
print("1 克 (g) = 1000 毫克 (mg)")
print("\n🎯 实际转换示例:")
# 体重转换
weight_kg = 45
weight_g = convert_weight(weight_kg, "kg", "g")
print(f"\n👤 体重转换:")
print(f"{weight_kg}千克 = {weight_g}克")
# 食物重量
apple_weight_g = 150
apple_weight_kg = convert_weight(apple_weight_g, "g", "kg")
print(f"\n🍎 苹果重量:")
print(f"{apple_weight_g}克 = {apple_weight_kg:.3f}千克")
# 药品剂量
medicine_mg = 500
medicine_g = convert_weight(medicine_mg, "mg", "g")
print(f"\n💊 药品剂量:")
print(f"{medicine_mg}毫克 = {medicine_g}克")
# 货车载重
truck_weight_t = 5
truck_weight_kg = convert_weight(truck_weight_t, "t", "kg")
print(f"\n🚚 货车载重:")
print(f"{truck_weight_t}吨 = {truck_weight_kg}千克")
3.2 市制和英制重量转换
# 市制和英制重量转换
print("\n⚖️ 市制和英制重量转换")
print("=" * 50)
def convert_chinese_weight(value, from_unit, to_unit):
"""
市制重量单位转换(中国)
支持单位:两、斤、公斤(kg)
转换关系:
1 公斤 = 2 斤
1 斤 = 10 两
"""
# 先转换为两
if from_unit == "两":
base_value = value
elif from_unit == "斤":
base_value = value * 10
elif from_unit == "kg": # 公斤
base_value = value * 20
else:
return "❌ 不支持的单位"
# 转换为目标单位
if to_unit == "两":
return base_value
elif to_unit == "斤":
return base_value / 10
elif to_unit == "kg":
return base_value / 20
else:
return "❌ 不支持的单位"
def convert_imperial_weight(value, from_unit, to_unit):
"""
英制重量单位转换
支持单位:盎司(oz)、磅(lb)
转换关系:
1 磅 = 16 盎司
"""
# 先转换为盎司
if from_unit == "oz": # 盎司
base_value = value
elif from_unit == "lb": # 磅
base_value = value * 16
else:
return "❌ 不支持的单位"
# 转换为目标单位
if to_unit == "oz":
return base_value
elif to_unit == "lb":
return base_value / 16
else:
return "❌ 不支持的单位"
def kg_to_pound(kg):
"""千克转磅(1千克 = 2.20462磅)"""
return kg * 2.20462
def pound_to_kg(lb):
"""磅转千克"""
return lb / 2.20462
def kg_to_jin(kg):
"""千克转斤(1千克 = 2斤)"""
return kg * 2
def jin_to_kg(jin):
"""斤转千克"""
return jin / 2
# 转换示例
print("\n📊 市制单位换算:")
print("-" * 40)
print("1 公斤 = 2 斤")
print("1 斤 = 10 两")
print("\n📊 英制单位换算:")
print("-" * 40)
print("1 磅 = 16 盎司")
print("1 千克 = 2.20462 磅")
print("\n🎯 实际转换示例:")
# 体重转换(公制→市制)
weight_kg = 50
weight_jin = kg_to_jin(weight_kg)
print(f"\n👤 体重转换(公斤→斤):")
print(f"{weight_kg}公斤 = {weight_jin}斤")
# 买菜重量
vegetable_jin = 3
vegetable_kg = jin_to_kg(vegetable_jin)
print(f"\n🥬 买菜重量:")
print(f"{vegetable_jin}斤 = {vegetable_kg:.1f}公斤")
# 体重转换(公制→英制)
weight_lb = kg_to_pound(weight_kg)
print(f"\n👤 体重转换(公斤→磅):")
print(f"{weight_kg}公斤 = {weight_lb:.1f}磅")
# 反向转换
weight_lb_input = 110
weight_kg_back = pound_to_kg(weight_lb_input)
print(f"\n👤 体重转换(磅→公斤):")
print(f"{weight_lb_input}磅 = {weight_kg_back:.1f}公斤")
# 食材转换
flour_oz = 16
flour_lb = convert_imperial_weight(flour_oz, "oz", "lb")
flour_kg = pound_to_kg(flour_lb)
print(f"\n🌾 面粉重量:")
print(f"{flour_oz}盎司 = {flour_lb}磅 = {flour_kg:.3f}千克")
🌡️ 第四部分:温度单位转换
4.1 温度转换公式
# 温度单位转换
print("🌡️ 温度单位转换")
print("=" * 50)
def celsius_to_fahrenheit(celsius):
"""
摄氏度转华氏度
公式:F = C × 9/5 + 32
"""
return celsius * 9/5 + 32
def fahrenheit_to_celsius(fahrenheit):
"""
华氏度转摄氏度
公式:C = (F - 32) × 5/9
"""
return (fahrenheit - 32) * 5/9
def celsius_to_kelvin(celsius):
"""
摄氏度转开尔文
公式:K = C + 273.15
"""
return celsius + 273.15
def kelvin_to_celsius(kelvin):
"""
开尔文转摄氏度
公式:C = K - 273.15
"""
return kelvin - 273.15
# 重要温度点
print("📊 重要温度点:")
print("-" * 40)
# 水的冰点和沸点
water_freezing_c = 0
water_boiling_c = 100
water_freezing_f = celsius_to_fahrenheit(water_freezing_c)
water_boiling_f = celsius_to_fahrenheit(water_boiling_c)
print(f"水的冰点:{water_freezing_c}°C = {water_freezing_f}°F")
print(f"水的沸点:{water_boiling_c}°C = {water_boiling_f}°F")
# 人体温度
body_temp_c = 37
body_temp_f = celsius_to_fahrenheit(body_temp_c)
print(f"正常体温:{body_temp_c}°C = {body_temp_f:.1f}°F")
# 舒适温度
comfort_temp_c = 25
comfort_temp_f = celsius_to_fahrenheit(comfort_temp_c)
print(f"舒适室温:{comfort_temp_c}°C = {comfort_temp_f}°F")
# 寒冷温度
cold_temp_c = -10
cold_temp_f = celsius_to_fahrenheit(cold_temp_c)
print(f"寒冷温度:{cold_temp_c}°C = {cold_temp_f}°F")
# 开尔文温度示例
print(f"\n🌡️ 开尔文温度:")
room_temp_c = 20
room_temp_k = celsius_to_kelvin(room_temp_c)
print(f"室温:{room_temp_c}°C = {room_temp_k:.2f}K")
absolute_zero_c = -273.15
absolute_zero_k = celsius_to_kelvin(absolute_zero_c)
print(f"绝对零度:{absolute_zero_c}°C = {absolute_zero_k}K")
# 温度感受描述
print("\n🎯 温度感受对照:")
print("-" * 40)
temperatures_c = [-20, -10, 0, 10, 20, 30, 40]
descriptions = ["极寒", "严寒", "寒冷", "凉爽", "舒适", "炎热", "酷热"]
for temp_c, desc in zip(temperatures_c, descriptions):
temp_f = celsius_to_fahrenheit(temp_c)
print(f"{temp_c:>4}°C ({temp_f:>5.1f}°F) - {desc}")
4.2 交互式温度转换
# 交互式温度转换器
print("\n🌡️ 交互式温度转换器")
print("=" * 50)
def describe_temperature(celsius):
"""描述温度感受"""
if celsius < -20:
return "❄️ 极寒!注意防冻!"
elif celsius < -10:
return "🥶 严寒!穿厚羽绒服!"
elif celsius < 0:
return "🧥 寒冷!需要外套!"
elif celsius < 10:
return "👔 凉爽!穿长袖!"
elif celsius < 20:
return "😊 舒适!最宜人的温度!"
elif celsius < 30:
return "😅 温暖!穿短袖!"
elif celsius < 35:
return "🥵 炎热!注意防暑!"
else:
return "🔥 酷热!减少外出!"
print("\n请选择转换类型:")
print("1. 摄氏度 → 华氏度")
print("2. 华氏度 → 摄氏度")
print("3. 摄氏度 ↔ 华氏度 对照表")
print("4. 退出")
while True:
choice = input("\n请选择 (1-4): ")
if choice == "4":
print("👋 再见!")
break
elif choice == "1":
# 摄氏度转华氏度
try:
celsius = float(input("请输入摄氏度温度: "))
fahrenheit = celsius_to_fahrenheit(celsius)
description = describe_temperature(celsius)
print(f"\n🌡️ 转换结果:")
print(f" {celsius}°C = {fahrenheit:.1f}°F")
print(f" {description}")
# 特别温度点对比
if celsius <= 0:
print(f" 💧 水的状态:结冰")
elif celsius >= 100:
print(f" 💧 水的状态:沸腾")
else:
print(f" 💧 水的状态:液态")
except ValueError:
print("❌ 请输入数字!")
elif choice == "2":
# 华氏度转摄氏度
try:
fahrenheit = float(input("请输入华氏度温度: "))
celsius = fahrenheit_to_celsius(fahrenheit)
description = describe_temperature(celsius)
print(f"\n🌡️ 转换结果:")
print(f" {fahrenheit}°F = {celsius:.1f}°C")
print(f" {description}")
except ValueError:
print("❌ 请输入数字!")
elif choice == "3":
# 温度对照表
print(f"\n🌡️ 温度对照表")
print(f"{'='*30}")
print(f"{'摄氏度':>8} {'华氏度':>8} {'感受':>8}")
print(f"{'-'*30}")
for temp_c in range(-20, 41, 5):
temp_f = celsius_to_fahrenheit(temp_c)
desc = describe_temperature(temp_c)
# 简化的描述
if "极寒" in desc:
short_desc = "极寒"
elif "严寒" in desc:
short_desc = "严寒"
elif "寒冷" in desc:
short_desc = "寒冷"
elif "凉爽" in desc:
short_desc = "凉爽"
elif "舒适" in desc:
short_desc = "舒适"
elif "温暖" in desc:
short_desc = "温暖"
elif "炎热" in desc:
short_desc = "炎热"
else:
short_desc = "酷热"
print(f"{temp_c:>8}°C {temp_f:>8.1f}°F {short_desc:>8}")
print(f"{'='*30}")
else:
print("❌ 请选择1-4的数字!")
🎪 第五部分:综合单位转换器
5.1 多功能单位转换器
# 多功能单位转换器
print("🔄 多功能单位转换器")
print("=" * 60)
class UnitConverter:
"""多功能单位转换器类"""
def __init__(self):
"""初始化转换系数"""
# 长度转换系数
self.length_factors = {
'mm': 0.001, # 毫米转米
'cm': 0.01, # 厘米转米
'm': 1.0, # 米
'km': 1000.0, # 千米转米
'in': 0.0254, # 英寸转米
'ft': 0.3048, # 英尺转米
'yd': 0.9144, # 码转米
'mi': 1609.344 # 英里转米
}
# 重量转换系数(相对于克)
self.weight_factors = {
'mg': 0.001, # 毫克转克
'g': 1.0, # 克
'kg': 1000.0, # 千克转克
't': 1000000.0, # 吨转克
'oz': 28.3495, # 盎司转克
'lb': 453.592, # 磅转克
'jin': 500.0, # 斤转克
'两': 50.0 # 两转克
}
def convert_length(self, value, from_unit, to_unit):
"""转换长度单位"""
if from_unit not in self.length_factors or to_unit not in self.length_factors:
return "❌ 不支持的单位"
# 先转换为米
meters = value * self.length_factors[from_unit]
# 再转换为目标单位
result = meters / self.length_factors[to_unit]
return result
def convert_weight(self, value, from_unit, to_unit):
"""转换重量单位"""
if from_unit not in self.weight_factors or to_unit not in self.weight_factors:
return "❌ 不支持的单位"
# 先转换为克
grams = value * self.weight_factors[from_unit]
# 再转换为目标单位
result = grams / self.weight_factors[to_unit]
return result
def convert_temperature(self, value, from_unit, to_unit):
"""转换温度单位"""
# 先转换为摄氏度
if from_unit == 'c':
celsius = value
elif from_unit == 'f':
celsius = (value - 32) * 5/9
elif from_unit == 'k':
celsius = value - 273.15
else:
return "❌ 不支持的单位"
# 从摄氏度转换
if to_unit == 'c':
return celsius
elif to_unit == 'f':
return celsius * 9/5 + 32
elif to_unit == 'k':
return celsius + 273.15
else:
return "❌ 不支持的单位"
def get_unit_name(self, unit_code):
"""获取单位名称"""
unit_names = {
# 长度
'mm': '毫米', 'cm': '厘米', 'm': '米', 'km': '千米',
'in': '英寸', 'ft': '英尺', 'yd': '码', 'mi': '英里',
# 重量
'mg': '毫克', 'g': '克', 'kg': '千克', 't': '吨',
'oz': '盎司', 'lb': '磅', 'jin': '斤', '两': '两',
# 温度
'c': '摄氏度', 'f': '华氏度', 'k': '开尔文'
}
return unit_names.get(unit_code, unit_code)
def show_conversion_table(self, conversion_type):
"""显示单位换算表"""
if conversion_type == 'length':
print("\n📏 长度单位换算表:")
print("-" * 40)
print("1 千米 = 1000 米")
print("1 米 = 100 厘米")
print("1 厘米 = 10 毫米")
print("1 英寸 = 2.54 厘米")
print("1 英尺 = 12 英寸 = 30.48 厘米")
print("1 码 = 3 英尺 = 0.9144 米")
print("1 英里 = 1760 码 = 1.609 千米")
elif conversion_type == 'weight':
print("\n⚖️ 重量单位换算表:")
print("-" * 40)
print("1 吨 = 1000 千克")
print("1 千克 = 1000 克")
print("1 克 = 1000 毫克")
print("1 磅 = 16 盎司 = 453.592 克")
print("1 盎司 = 28.3495 克")
print("1 千克 = 2 斤")
print("1 斤 = 10 两 = 500 克")
elif conversion_type == 'temperature':
print("\n🌡️ 温度单位换算:")
print("-" * 40)
print("华氏度 = 摄氏度 × 9/5 + 32")
print("摄氏度 = (华氏度 - 32) × 5/9")
print("开尔文 = 摄氏度 + 273.15")
print("摄氏度 = 开尔文 - 273.15")
# 使用转换器
converter = UnitConverter()
print("\n🎯 单位转换器已就绪!")
while True:
print("\n" + "=" * 60)
print("请选择转换类型:")
print("1. 📏 长度单位转换")
print("2. ⚖️ 重量单位转换")
print("3. 🌡️ 温度单位转换")
print("4. 📊 查看换算表")
print("5. 🚪 退出")
print("=" * 60)
choice = input("\n请选择 (1-5): ")
if choice == "5":
print("👋 感谢使用单位转换器!")
break
elif choice == "1":
# 长度转换
print("\n📏 可用的长度单位:")
length_units = ['mm', 'cm', 'm', 'km', 'in', 'ft', 'yd', 'mi']
for unit in length_units:
print(f" {unit}: {converter.get_unit_name(unit)}", end=" ")
try:
value = float(input("\n\n请输入数值: "))
from_unit = input("从哪个单位: ")
to_unit = input("转换到哪个单位: ")
result = converter.convert_length(value, from_unit, to_unit)
if isinstance(result, str): # 错误信息
print(result)
else:
from_name = converter.get_unit_name(from_unit)
to_name = converter.get_unit_name(to_unit)
print(f"\n✅ 转换结果:")
print(f" {value} {from_name} = {result:.6g} {to_name}")
except ValueError:
print("❌ 请输入有效的数字!")
elif choice == "2":
# 重量转换
print("\n⚖️ 可用的重量单位:")
weight_units = ['mg', 'g', 'kg', 't', 'oz', 'lb', 'jin', '两']
for unit in weight_units:
print(f" {unit}: {converter.get_unit_name(unit)}", end=" ")
try:
value = float(input("\n\n请输入数值: "))
from_unit = input("从哪个单位: ")
to_unit = input("转换到哪个单位: ")
result = converter.convert_weight(value, from_unit, to_unit)
if isinstance(result, str): # 错误信息
print(result)
else:
from_name = converter.get_unit_name(from_unit)
to_name = converter.get_unit_name(to_unit)
print(f"\n✅ 转换结果:")
print(f" {value} {from_name} = {result:.6g} {to_name}")
except ValueError:
print("❌ 请输入有效的数字!")
elif choice == "3":
# 温度转换
print("\n🌡️ 可用的温度单位:")
temp_units = ['c', 'f', 'k']
for unit in temp_units:
print(f" {unit}: {converter.get_unit_name(unit)}", end=" ")
try:
value = float(input("\n\n请输入数值: "))
from_unit = input("从哪个单位 (c/f/k): ")
to_unit = input("转换到哪个单位 (c/f/k): ")
result = converter.convert_temperature(value, from_unit, to_unit)
if isinstance(result, str): # 错误信息
print(result)
else:
from_name = converter.get_unit_name(from_unit)
to_name = converter.get_unit_name(to_unit)
print(f"\n✅ 转换结果:")
print(f" {value} {from_name} = {result:.2f} {to_name}")
except ValueError:
print("❌ 请输入有效的数字!")
elif choice == "4":
# 查看换算表
print("\n📊 选择换算表类型:")
print("1. 长度单位换算表")
print("2. 重量单位换算表")
print("3. 温度单位换算")
table_choice = input("请选择 (1-3): ")
if table_choice == "1":
converter.show_conversion_table('length')
elif table_choice == "2":
converter.show_conversion_table('weight')
elif table_choice == "3":
converter.show_conversion_table('temperature')
else:
print("❌ 无效选择!")
else:
print("❌ 请选择1-5的数字!")
input("\n按回车键继续...")
5.2 实际生活应用
# 实际生活单位转换应用
print("🏠 实际生活单位转换应用")
print("=" * 60)
def cooking_converter():
"""烹饪单位转换"""
print("\n🍳 烹饪单位转换器")
print("-" * 40)
# 烹饪单位换算
cooking_units = {
'毫升': 1,
'升': 1000,
'茶匙': 5, # 约5毫升
'汤匙': 15, # 约15毫升
'杯': 240, # 约240毫升
'盎司': 29.5735, # 液体盎司
}
print("可用的烹饪单位:")
for unit in cooking_units:
print(f" {unit}", end=" ")
try:
value = float(input("\n\n请输入数值: "))
from_unit = input("从哪个单位: ")
to_unit = input("转换到哪个单位: ")
if from_unit not in cooking_units or to_unit not in cooking_units:
print("❌ 不支持的单位")
return
# 转换
ml_value = value * cooking_units[from_unit]
result = ml_value / cooking_units[to_unit]
print(f"\n✅ 转换结果:")
print(f" {value} {from_unit} = {result:.2f} {to_unit}")
except ValueError:
print("❌ 请输入数字!")
def travel_converter():
"""旅行单位转换"""
print("\n✈️ 旅行单位转换器")
print("-" * 40)
# 旅行相关单位
print("选择转换类型:")
print("1. 距离转换(千米↔英里)")
print("2. 速度转换(千米/时↔英里/时)")
print("3. 货币估算(人民币↔美元,近似)")
choice = input("请选择 (1-3): ")
if choice == "1":
# 距离转换
try:
value = float(input("请输入距离: "))
unit = input("单位是千米(km)还是英里(mi)? ")
if unit.lower() in ['km', '千米']:
result = value * 0.621371 # 千米转英里
print(f"\n✅ {value}千米 ≈ {result:.2f}英里")
elif unit.lower() in ['mi', '英里']:
result = value * 1.60934 # 英里转千米
print(f"\n✅ {value}英里 ≈ {result:.2f}千米")
else:
print("❌ 不支持的单位")
except ValueError:
print("❌ 请输入数字!")
elif choice == "2":
# 速度转换
try:
value = float(input("请输入速度: "))
unit = input("单位是千米/时(km/h)还是英里/时(mph)? ")
if unit.lower() in ['km/h', '千米/时']:
result = value * 0.621371
print(f"\n✅ {value}千米/时 ≈ {result:.2f}英里/时")
elif unit.lower() in ['mph', '英里/时']:
result = value * 1.60934
print(f"\n✅ {value}英里/时 ≈ {result:.2f}千米/时")
else:
print("❌ 不支持的单位")
except ValueError:
print("❌ 请输入数字!")
elif choice == "3":
# 货币估算(近似值)
try:
value = float(input("请输入金额: "))
unit = input("是人民币(CNY)还是美元(USD)? ")
# 使用近似汇率 1 USD ≈ 7 CNY
if unit.lower() in ['cny', '人民币', '元']:
result = value / 7
print(f"\n💰 估算结果(汇率 ≈ 1:7):")
print(f" {value}人民币 ≈ {result:.2f}美元")
elif unit.lower() in ['usd', '美元']:
result = value * 7
print(f"\n💰 估算结果(汇率 ≈ 1:7):")
print(f" {value}美元 ≈ {result:.2f}人民币")
else:
print("❌ 不支持的单位")
except ValueError:
print("❌ 请输入数字!")
else:
print("❌ 无效选择!")
def clothing_size_converter():
"""服装尺码转换"""
print("\n👕 服装尺码转换器")
print("-" * 40)
# 儿童服装尺码对照(近似)
kids_sizes = {
'cn': ['100', '110', '120', '130', '140', '150'], # 中国尺码(身高cm)
'us': ['4T', '5T', '6', '7', '8', '10'], # 美国尺码
'eu': ['100', '110', '120', '130', '140', '150'], # 欧洲尺码
}
print("儿童服装尺码对照表:")
print("-" * 30)
print(f"{'中国':^6} {'美国':^6} {'欧洲':^6}")
print("-" * 30)
for i in range(len(kids_sizes['cn'])):
print(f"{kids_sizes['cn'][i]:^6} {kids_sizes['us'][i]:^6} {kids_sizes['eu'][i]:^6}")
# 鞋码转换
print(f"\n👟 儿童鞋码对照(近似):")
print("-" * 30)
print("中国码(CN) ≈ 欧洲码(EU) - 1")
print("美国码(US) ≈ 欧洲码(EU) - 33")
try:
shoe_size = float(input("\n请输入鞋码: "))
from_country = input("是哪个国家的尺码 (CN/EU/US)? ").upper()
if from_country == 'CN':
eu_size = shoe_size + 1
us_size = eu_size - 33
elif from_country == 'EU':
eu_size = shoe_size
us_size = shoe_size - 33
cn_size = shoe_size - 1
elif from_country == 'US':
us_size = shoe_size
eu_size = shoe_size + 33
cn_size = eu_size - 1
else:
print("❌ 不支持的国家代码")
return
print(f"\n✅ 鞋码对照:")
if from_country != 'CN':
print(f" 中国码(CN): {cn_size:.0f}")
if from_country != 'EU':
print(f" 欧洲码(EU): {eu_size:.0f}")
if from_country != 'US':
print(f" 美国码(US): {us_size:.0f}")
except ValueError:
print("❌ 请输入数字!")
# 主菜单
print("\n🏠 实际生活转换应用")
print("=" * 40)
while True:
print("\n选择应用场景:")
print("1. 🍳 烹饪单位转换")
print("2. ✈️ 旅行单位转换")
print("3. 👕 服装尺码转换")
print("4. 🚪 返回")
choice = input("\n请选择 (1-4): ")
if choice == "1":
cooking_converter()
elif choice == "2":
travel_converter()
elif choice == "3":
clothing_size_converter()
elif choice == "4":
print("返回主菜单...")
break
else:
print("❌ 请选择1-4的数字!")
input("\n按回车键继续...")
📅 下节课预告
第20课:阶段项目-智能问答机器人
下节课你将学习:
- 综合运用前19课的所有知识
- 制作能回答问题的智能机器人
- 实现自然语言交互
- 添加记忆和学习功能
- 制作完整的智能对话系统
预习思考:
- 如何让程序理解用户的问题?
- 如何根据问题给出合适的答案?
- 如何让对话更自然有趣?
💬 给家长的话
亲爱的家长:
今天孩子学习了单位转换,这是数学和编程结合的实际应用,能帮助孩子在生活中解决实际问题。
孩子今天学会了:
- ✅ 长度单位的转换(公制、英制、市制)
- ✅ 重量单位的转换
- ✅ 温度单位的转换
- ✅ 制作多功能单位转换器
- ✅ 在实际生活中应用单位转换
单位转换的实际价值:
| 转换类型 | 生活应用 | 数学意义 | 能力培养 |
|---------|---------|---------|---------|
| 长度转换 | 身高、距离、尺寸 | 比例计算 | 空间思维 |
| 重量转换 | 体重、食材、包裹 | 单位换算 | 测量能力 |
| 温度转换 | 天气、烹饪、科学 | 公式应用 | 科学思维 |
| 综合转换 | 旅行、购物、生活 | 实际问题解决 | 应用能力 |
您可以这样做:
生活应用:
- 一起购物:用转换器比较商品规格
- 旅行计划:计算距离和速度
- 厨房帮手:转换食谱中的单位
- 身高体重:记录和转换身体数据
思维训练:
- 讨论:为什么需要单位转换?
- 思考:如何设计更方便的转换器?
- 实践:在生活中发现需要转换的场景
- 创造:设计新的转换工具
温馨提示:
- 单位转换是数学的实际应用
- 通过编程让转换更容易
- 鼓励孩子观察生活中的单位
- 用技术解决实际问题
🏆 今日成就
完成了今天的学习,你:
📏 掌握了长度单位转换
⚖️ 学会了重量单位转换
🌡️ 理解了温度单位转换
🔄 能制作多功能转换器
🏠 会解决实际问题
挑战任务:
- 制作个人身高体重转换器
- 设计旅行专用转换工具
- 创建家庭烹饪转换助手
- 记录一周的温度变化并转换
🌟 编程心法
单位是测量的语言
转换是沟通的桥梁
用代码理解世界
用计算连接不同
从厘米到英寸
从千克到磅
从摄氏度到华氏度
编程让转换更简单
数学让世界更清晰
从今天起
用技术解决实际问题
用智慧连接不同世界
记住:编程不仅是写代码,更是解决问题的工具。用编程让生活更便利,让学习更有趣!
第19课结束。你现在已经是单位转换小专家了!
实践任务:
1. 制作个人专属转换工具
2. 设计旅行转换助手
3. 创建烹饪转换器
4. 记录和分析生活数据
下节课,让我们综合所有知识,制作智能问答机器人!
第20课见!🤖