Skip to content

Latest commit

 

History

History
386 lines (313 loc) · 11.5 KB

File metadata and controls

386 lines (313 loc) · 11.5 KB
Error in user YAML: (<unknown>): could not find expected ':' while scanning a simple key at line 3 column 1
---
- oeasy Python 0139
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。
本教程同步发布在: 

     个人网站: `https://oeasy.org` 
     蓝桥云课: `https://www.lanqiao.cn/courses/3584` 
     GitHub: `https://github.com/overmind1980/oeasy-python-tutorial` 
     Gitee: `https://gitee.com/overmind1980/oeasypython` 
---

字典类型

回忆

  • 上次了解了 字典排序
  • 字典 可以排序
    • 使用 lambda 进行排序
    • 排序 结果返回key的列表

图片描述

  • ai环境下
    • 有什么有意思的字典 吗??🤔

菜肴字典

生成Python字典:存储2道菜谱,键为菜名,值为包含主要材料(元组)、调味料(元组)、制作步骤(列表)的字典,包含番茄炒蛋、宫保鸡丁,代码简洁可直接运行

图片描述

层叠结构

图片描述

# 1. 定义食谱字典
foods = dict()

# 2. 添加番茄炒蛋的食谱信息
foods["番茄炒蛋"] = {
    "主要材料": ("鸡蛋", "番茄"),
    "调味料": ("盐", "糖", "食用油"),
    "制作步骤": [
        "1. 鸡蛋打入碗中打散,番茄切块",
        "2. 锅中热油,倒入鸡蛋液,待凝固后炒散盛出",
        "3. 锅中余油炒番茄,加入少许糖提鲜",
        "4. 待番茄炒软出汁后,加入炒好的鸡蛋,加盐调味,翻炒均匀"
    ]
}

# 3. 添加宫保鸡丁的食谱信息
foods["宫保鸡丁"] = {
    "主要材料": ("鸡胸肉", "花生米", "干辣椒", "葱", "姜", "蒜"),
    "调味料": ("酱油", "料酒", "白糖", "醋", "盐", "淀粉"),
    "制作步骤": [
        "1. 鸡胸肉切丁,用酱油、料酒、淀粉腌制15分钟",
        "2. 干辣椒剪成小段,葱、姜、蒜切片备用",
        "3. 热锅凉油炒辣椒,再加入葱姜蒜炒出香味",
        "4. 倒入鸡丁翻炒至变色,加入适量酱油、白糖",
        "5. 快速炒匀后加点醋,撒上花生米,加盐调味,翻炒均匀"
    ]
}

# 4. 输出食谱的键值对、所有键(食物名)
print("食谱:", foods.items())
print("食物:", foods.keys())

深入

# 5. 获取番茄炒蛋的制作步骤(存在则返回,不存在则提示)
print("番茄炒蛋的制作步骤:", foods["番茄炒蛋"]["主要材料"])

# 6. 获取宫保鸡丁的主要材料
print("宫保鸡丁的主要材料:", foods["宫保鸡丁"]["主要材料"])

修改为步骤为核心

  • 结构本身 就有 明确的意义
将菜谱字典转为:菜品名为键,值为步骤字典;每步含材料、调味料、烹饪方法,无内容则省略键,保留完整详细步骤,给我python

图片描述

具体代码

# 最终版美食字典:
# 层级:菜品名 → 制作步骤字典 → 单步字典(无内容的键直接省略)
food_dict = {
    "番茄炒蛋": {
        "步骤1": {
            "材料": ["鸡蛋2个", "番茄1个"],
            "烹饪方法": "鸡蛋打入碗中充分打散;番茄洗净切成小块备用"
        },
        "步骤2": {
            "调味料": ["食用油1勺"],
            "烹饪方法": "热锅倒入食用油,油温六成热时倒入打散的鸡蛋液"
        },
        "步骤3": {
            "烹饪方法": "待鸡蛋液凝固后,用铲子快速炒散,盛出备用"
        },
        "步骤4": {
            "调味料": ["白糖半勺"],
            "烹饪方法": "原锅留少许底油,放入番茄块翻炒,加白糖提鲜至番茄出汁变软"
        },
        "步骤5": {
            "材料": ["炒好的鸡蛋"],
            "调味料": ["盐少许"],
            "烹饪方法": "倒入炒好的鸡蛋,加盐调味后翻炒均匀出锅"
        }
    },
    "宫保鸡丁": {
        "步骤1": {
            "材料": ["鸡胸肉200g", "花生米50g", "干辣椒5个", "葱1段", "姜2片", "蒜2瓣"],
            "调味料": ["酱油1勺", "料酒1勺", "淀粉1勺"],
            "烹饪方法": "鸡胸肉切丁,用酱油、料酒、淀粉抓匀腌制15分钟;干辣椒剪段,葱姜蒜切片备用"
        },
        "步骤2": {
            "调味料": ["食用油2勺"],
            "烹饪方法": "热锅凉油,放入干辣椒段炒出香味,再加葱姜蒜片爆香"
        },
        "步骤3": {
            "材料": ["腌制好的鸡丁"],
            "烹饪方法": "倒入鸡丁快速翻炒至变色断生"
        },
        "步骤4": {
            "调味料": ["白糖1勺", "醋半勺", "盐少许"],
            "烹饪方法": "加白糖、醋、盐调味,翻炒均匀后放入花生米"
        },
        "步骤5": {
            "烹饪方法": "快速翻炒10秒,确保花生米裹满汤汁后出锅"
        }
    }
}

# 调用示例:获取番茄炒蛋步骤3的信息(仅含烹饪方法)
print("番茄炒蛋步骤3:", food_dict["番茄炒蛋"]["步骤3"])
# 输出:{'烹饪方法': '待鸡蛋液凝固后,用铲子快速炒散,盛出备用'}

# 调用示例:获取宫保鸡丁步骤1的材料
print("宫保鸡丁步骤1材料:", food_dict["宫保鸡丁"]["步骤1"]["材料"])
# 输出:['鸡胸肉200g', '花生米50g', '干辣椒5个', '葱1段', '姜2片', '蒜2瓣']

具体问题

  • 在世界上飞行
    • 落地之后 有一个时区转化的问题

图片描述

  • 这个问题 应该如何描述呢?

开局

Python 时区计算:5 个城市(北京、伦敦、纽约、东京、悉尼),输入出发地、起飞时间、目的地,自动算当地到达时间,带数据校验和跨天显示
  • 整体描述
    • 限定在 五个城市

图片描述

核心结构

图片描述

  • 这里元组作为字典的key
# 假设的飞行时长(单位:小时),确保包含所有城市之间的往返飞行时长
flight_duration = {
    ("北京", "伦敦"): 10,
    ("伦敦", "北京"): 10,
    ("北京", "纽约"): 13,
    ("纽约", "北京"): 13,
    ("北京", "东京"): 3,
    ("东京", "北京"): 3,
    ("北京", "悉尼"): 10,
    ("悉尼", "北京"): 10,
    ("伦敦", "纽约"): 7,
    ("纽约", "伦敦"): 7,
    ("伦敦", "东京"): 9,
    ("东京", "伦敦"): 9,
    ("伦敦", "悉尼"): 11,
    ("悉尼", "伦敦"): 11,
    ("纽约", "东京"): 14,
    ("东京", "纽约"): 14,
    ("纽约", "悉尼"): 16,
    ("悉尼", "纽约"): 16,
    ("东京", "悉尼"): 7,
    ("悉尼", "东京"): 7
}

# 假设的城市和时区信息(简化示例)
city_timezones = {
    "北京": 8,
    "伦敦": 0,
    "纽约": -5,
    "东京": 9,
    "悉尼": 10
}

# 手动输入出发地、起飞时间和目的地
while True:
    departure_city = input("请输入出发城市(例如:北京): ")
    if departure_city not in city_timezones:
        print("输入的出发城市不存在,请重新输入。")
        continue
    break

while True:
    departure_time_str = input("请输入出发时间(格式:HH:MM,例如:08:00): ")
    try:
        hours, minutes = map(int, departure_time_str.split(':'))
        if 0 <= hours < 24 and 0 <= minutes < 60:
            break
        else:
            print("出发时间格式不正确或超出范围,请重新输入。")
    except:
        print("出发时间格式不正确,请重新输入。")

while True:
    arrival_city = input("请输入到达城市(例如:纽约): ")
    if arrival_city not in city_timezones:
        print("输入的到达城市不存在,请重新输入。")
        continue
    if (departure_city, arrival_city) not in flight_duration:
        print("该航线不存在,请重新输入。")
        continue
    break

departure_timezone = city_timezones[departure_city]
arrival_timezone = city_timezones[arrival_city]
duration = flight_duration[(departure_city, arrival_city)]

# 将出发时间转换为分钟数
departure_time_minutes = hours * 60 + minutes
# 计算起飞时到达城市的当地时间(分钟数)
local_time_at_departure_in_arrival_city = departure_time_minutes + (arrival_timezone - departure_timezone) * 60
# 加上飞行时间(分钟数)得到到达时间(分钟数)
arrival_time_minutes = local_time_at_departure_in_arrival_city + duration * 60
# 计算经过的天数
days_passed = arrival_time_minutes // (24 * 60)
# 处理时间超过一天的情况,转换为当天的分钟数
arrival_time_minutes = arrival_time_minutes % (24 * 60)
# 转换回小时和分钟
arrival_hours = arrival_time_minutes // 60
arrival_minutes = arrival_time_minutes % 60

print(f"飞行时间为 {duration} 小时。")
if days_passed > 0:
    print(f"到达 {arrival_city} 的当地时间是次日 {arrival_hours:02d}:{arrival_minutes:02d} 点")
else:
    print(f"到达 {arrival_city} 的当地时间是 {arrival_hours:02d}:{arrival_minutes:02d} 点")

快递价格

  • 能否用这张图作为提示词
    • 让ai生成 相应的程序呢?

图片描述

具体操作

根据这个生成python代码,输入目的地,重量,得到价格
  • 再把照片发给ai

图片描述

代码

  • 这次元组 作为字典的values
# 字典 value 是元组:(首重价格, 续重价格)
price_data = {
    "江苏": (8, 2),
    "浙江": (8, 2),
    "上海": (8, 2),
    "安徽": (8, 2),
    "广东": (10, 5),
    "福建": (10, 5),
    "湖南": (10, 5),
    "湖北": (10, 5),
    "山东": (10, 5),
    "天津": (10, 5),
    "北京": (10, 5),
    "江西": (10, 5),
    "河南": (10, 5),
    "河北": (10, 5),
    "海南": (12, 8),
    "四川": (12, 8),
    "云南": (12, 8),
    "贵州": (12, 8),
    "陕西": (12, 8),
    "重庆": (12, 8),
    "山西": (12, 8),
    "广西": (12, 8),
    "吉林": (12, 8),
    "黑龙江": (12, 8),
    "内蒙古": (15, 12),
    "宁夏": (15, 12),
    "甘肃": (15, 12),
    "辽宁": (15, 12),
    "青海": (15, 12),
    "新疆": (22, 22),
    "西藏": (25, 25)
}

def calculate_price(destination, weight):
    # 判断省份是否存在
    if destination not in price_data:
        return None
    
    # 元组取值:第0位是首重,第1位是续重
    first_weight, continued_weight = price_data[destination]
    
    if weight <= 1:
        return first_weight
    else:
        extra = weight - 1
        # 不足1kg按1kg计算续重
        extra_kg = int(extra) if extra.is_integer() else int(extra) + 1
        return first_weight + extra_kg * continued_weight

# 测试运行
dest = input("请输入目的地省份:")
weight = float(input("请输入重量(kg):"))
price = calculate_price(dest, weight)

if price is None:
    print("未找到该地区价格")
else:
    print(f"运费:{price} 元")

元组 与 字典

  • 元组 也可以
    • 作为 字典的 values
    • 列表也可以作为 values

图片描述

  • 字典的keys
    • 必须可以哈希
      • 元组 可以
      • 列表 不行

总结

  • 这次学习了 ai时代下
    • 综合使用 容器对象的方式
  • 向ai询问过程
    1. 先明确 数据结构
    2. 再 细分 步骤
    3. 肯定成果 指出问题
    4. 小步快跑 迅速迭代

图片描述

  • 是时候 总结一下 容器类型 了!🤔
  • 下次再说!👋

  • 本文来自 oeasy Python 系统教程。
  • 想完整、扎实学 Python,
  • 搜索 oeasy 即可。