当前位置:首页>python>【Python】Day13:第二周复习与实战(上)

【Python】Day13:第二周复习与实战(上)

  • 2026-07-02 16:54:09
【Python】Day13:第二周复习与实战(上)

🎯 学习目标

  1. 复习巩固第二周所学:列表、字典、字符串方法、元组、集合
  2. 学会项目需求分析:把一个大问题拆解成小问题
  3. 学会数据结构设计:选择合适的数据类型存储通讯录数据
  4. 完成通讯录的基础框架搭建:主菜单循环 + 基本的添加和查看功能
  5. 理解程序 = 数据结构 + 算法的思想

一、第二周知识回顾

  1. 列表核心要点
    # 创建lst = [123]# 增lst.append(4)           # 末尾加一个lst.insert(00)        # 指定位置插入lst.extend([56])      # 末尾加多个# 删lst.remove(3)           # 按值删lst.pop()               # 删末尾并返回lst.pop(0)              # 按索引删del lst[1]              # 按索引删# 改lst[0] = 99# 索引赋值# 查lst.index(4)            # 找索引lst.count(2)            # 计次数in lst                # 是否存在# 排序lst.sort()              # 原地排sorted(lst)             # 返回新的lst.reverse()           # 原地反转
  2. 字典核心要点
    # 创建d = {"name""小王""age"18}# 增/改d["city"] = "北京"# 键存在就改,不存在就增d.update({"age"19})   # 批量更新# 删del d["city"]           # 删除键值对d.pop("age"0)         # 删除并返回值# 查d["name"]               # 键不存在会报错d.get("name""未知")   # 安全访问# 遍历for k, v in d.items():    print(k, v)
  3. 字符串方法核心要点
    s = "  Hello, World!  "s.strip()               # "Hello, World!"s.split(",")            # ["  Hello", " World!  "]",".join(["a""b"])    # "a,b"s.replace("World""Python")s.find("World")         # 索引s.count("l")            # 次数s.lower() / s.upper()   # 大小写
  4. 元组与集合核心要点
    # 元组:不可变t = (123)a, b, c = t             # 解包# 集合:去重、交集s = {123}s.add(4){12} & {23}         # {2}  交集{12} | {23}         # {1, 2, 3}  并集

二、项目需求分析:命令行通讯录

  1. 功能需求一个命令行通讯录程序,支持以下操作:

    功能
    说明
    添加联系人
    输入姓名、电话、城市等信息
    查看所有联系人
    列表显示所有联系人的简要信息
    查找联系人
    按姓名查找,显示详细信息
    修改联系人
    修改已有联系人的信息
    删除联系人
    删除指定联系人
    退出程序
    保存并退出
  2. 交互方式

    ========== 命令行通讯录 ==========1. 添加联系人2. 查看所有联系人3. 查找联系人4. 修改联系人5. 删除联系人0. 退出=================================请选择操作(0-5):
  3. 需求拆解:从大到小

    通讯录程序├── 数据结构设计(用什么存?)├── 主菜单循环(怎么交互?)├── 功能模块│   ├── 添加联系人│   ├── 查看所有联系人│   ├── 查找联系人│   ├── 修改联系人│   └── 删除联系人└── 退出处理

三、数据结构设计

  1. 方案对比

    方案
    结构
    优点
    缺点
    方案A
    列表存姓名、列表存电话
    简单
    需要两个列表同步管理,容易出错
    方案B
    列表存字典
    灵活,可扩展
    按姓名查找需要遍历
    方案C
    字典嵌套字典
    按姓名直接查找
    同名怎么办?
  2. 最终方案:字典嵌套字典,以姓名为键

    contacts = {"小王": {"phone""138-0001-0001","city""北京","email""xiaowang@qq.com"    },"小李": {"phone""139-0002-0002","city""上海","email""xiaoli@163.com"    }}
    • 按姓名查找最快:contacts["小王"]一步到位
    • 每个人的信息结构清晰:子字典
    • 容易增删改查:字典的强项
    • 为什么选这个方案?
    • 潜在问题:同名怎么办?本次项目简化处理,同名视为同一人(覆盖)
  3. 预设数据

    # 预设几个联系人,方便测试contacts = {"小王": {"phone""138-0001-0001""city""北京""email""xiaowang@qq.com"},"小李": {"phone""139-0002-0002""city""上海""email""xiaoli@163.com"},"小张": {"phone""137-0003-0003""city""广州""email""xiaozhang@gmail.com"}}

四、搭建基础框架:主菜单循环

  1. 核心结构:while True +input +if/elif/else
    # 通讯录数据contacts = {"小王": {"phone""138-0001-0001""city""北京""email""xiaowang@qq.com"},"小李": {"phone""139-0002-0002""city""上海""email""xiaoli@163.com"},"小张": {"phone""137-0003-0003""city""广州""email""xiaozhang@gmail.com"}}# 主循环whileTrue:    print("\n========== 命令行通讯录 ==========")    print("1. 添加联系人")    print("2. 查看所有联系人")    print("3. 查找联系人")    print("4. 修改联系人")    print("5. 删除联系人")    print("0. 退出")    print("==================================")    choice = input("请选择操作(0-5):").strip()if choice == "0":        print("感谢使用,再见!")breakelif choice == "1":        print("【添加联系人】")TODO: 今天实现elif choice == "2":        print("【查看所有联系人】")TODO: 今天实现elif choice == "3":        print("【查找联系人】(明天实现)")elif choice == "4":        print("【修改联系人】(明天实现)")elif choice == "5":        print("【删除联系人】(明天实现)")else:        print("⚠️ 无效输入,请输入 0-5 之间的数字")
  2. 理解框架结构
    • while True:无限循环,直到break才退出
    • input()获取用户选择
    • if/elif/else根据选择执行不同功能
    • .strip()清理输入的首尾空白
    • 每个# TODO是今天和明天要填充的功能
  3. 为什么用while True而不是直接顺序执行?
    • 顺序执行:跑一次就结束了,用户只能做一次操作
    • while True:程序持续运行,用户可以反复操作,直到选择退出
    • 这是交互式命令行程序的标准模式

五、实现添加联系人

  1. 添加逻辑
    输入姓名 → 姓名为空则提示 → 姓名已存在则确认是否覆盖 →输入电话 → 电话为空则提示 → 输入城市 → 输入邮箱 →写入字典 → 提示成功
  2. 代码实现
    # === 添加联系人(嵌在 choice == "1" 分支中)===name = input("  请输入姓名:").strip()ifnot name:    print("⚠️ 姓名不能为空!")else:if name in contacts:        print(f"⚠️ 联系人 '{name}' 已存在!")        overwrite = input("  是否覆盖?(y/n):").strip().lower()if overwrite != "y":            print("  取消添加。")else:            phone = input("  请输入电话:").strip()            city = input("  请输入城市:").strip()            email = input("  请输入邮箱:").strip()            contacts[name] = {"phone": phone, "city": city, "email": email}            print(f"✅ 联系人 '{name}' 覆盖成功!")else:        phone = input("  请输入电话:").strip()        city = input("  请输入城市:").strip()        email = input("  请输入邮箱:").strip()        contacts[name] = {"phone": phone, "city": city, "email": email}        print(f"✅ 联系人 '{name}' 添加成功!")
  3. 观察:上面有重复代码,能不能精简?
    # === 添加联系人(精简版)===name = input("  请输入姓名:").strip()can_add = True# 标志:是否可以继续添加ifnot name:    print("⚠️ 姓名不能为空!")    can_add = Falseif can_add and name in contacts:    print(f"⚠️ 联系人 '{name}' 已存在!")    overwrite = input("  是否覆盖?:").strip().lower()if overwrite != "y":        print("  取消添加。")        can_add = Falseif can_add:    phone = input("  请输入电话:").strip()ifnot phone:        print("⚠️ 电话不能为空!")else:        city = input("  请输入城市:").strip()        email = input("  请输入邮箱:").strip()if email and"@"notin email:            print("⚠️ 邮箱格式不正确,将不保存邮箱")            email = ""        contacts[name] = {"phone": phone, "city": city, "email": email}        print(f"✅ 联系人 '{name}' 添加成功!")
    • "已存在且确认覆盖"和"不存在"的后续操作是一样的:输入电话、城市、邮箱、写入字典
    • 我们可以用一个标志变量can_add来控制是否继续:

六、实现查看所有联系人

  1. 查看逻辑
    判断通讯录是否为空 →为空则提示 →不为空则打印表头 → 遍历字典打印每行 → 打印统计信息
  2. 代码实现
    # === 查看所有联系人(嵌在 choice == "2" 分支中)===ifnot contacts:    print("📭 通讯录为空!")else:# 表头    print(f"  {'序号':<4}{'姓名':<8}{'电话':<18}{'城市':<8}{'邮箱':<20}")    print("  " + "-" * 58)# 表格内容:用 enumerate 给每行加序号for i, (name, info) in enumerate(contacts.items(), 1):        phone = info["phone"]        city = info.get("city""未知"or"未知"        email = info.get("email""无"or"无"        print(f"  {i:<4}{name:<8}{phone:<18}{city:<8}{email:<20}")    print("  " + "-" * 58)    print(f"  共 {len(contacts)} 位联系人")# 城市统计    city_count = {}for info in contacts.values():        city = info.get("city""未知"or"未知"        city_count[city] = city_count.get(city, 0) + 1    city_info = "、".join(f"{c}{n}人"for c, n in city_count.items())    print(f"  城市分布:{city_info}")
  3. 格式化输出说明
    • {name:<8} 表示左对齐,占8个字符宽度
    • enumerate(contacts.items(), 1)从1开始编号 -info.get("city", "未知") or "未知" 双重保护:键不存在时返回"未知",值为空字符串时也返回"未知"

七、整合:今天完成的完整代码

# ==========================================#        命令行通讯录(Day13 版本)# ==========================================# 通讯录数据contacts = {"小王": {"phone""138-0001-0001""city""北京""email""xiaowang@qq.com"},"小李": {"phone""139-0002-0002""city""上海""email""xiaoli@163.com"},"小张": {"phone""137-0003-0003""city""广州""email""xiaozhang@gmail.com"}}# 主循环whileTrue:    print("\n========== 命令行通讯录 ==========")    print("1. 添加联系人")    print("2. 查看所有联系人")    print("3. 查找联系人")    print("4. 修改联系人")    print("5. 删除联系人")    print("0. 退出")    print("==================================")    choice = input("请选择操作(0-5):").strip()if choice == "0":        print("感谢使用,再见!")breakelif choice == "1":# ---- 添加联系人 ----        name = input("  请输入姓名:").strip()        can_add = Trueifnot name:            print("⚠️ 姓名不能为空!")            can_add = Falseif can_add and name in contacts:            print(f"⚠️ 联系人 '{name}' 已存在!")            overwrite = input("  是否覆盖?:").strip().lower()if overwrite != "y":                print("  取消添加。")                can_add = Falseif can_add:            phone = input("  请输入电话:").strip()ifnot phone:                print("⚠️ 电话不能为空!")else:                city = input("  请输入城市:").strip()                email = input("  请输入邮箱:").strip()if email and"@"notin email:                    print("⚠️ 邮箱格式不正确,将不保存邮箱")                    email = ""                contacts[name] = {"phone": phone, "city": city, "email": email}                print(f"✅ 联系人 '{name}' 添加成功!")elif choice == "2":# ---- 查看所有联系人 ----ifnot contacts:            print("📭 通讯录为空!")else:            print(f"  {'序号':<4}{'姓名':<8}{'电话':<18}{'城市':<8}{'邮箱':<20}")            print("  " + "-" * 58)for i, (name, info) in enumerate(contacts.items(), 1):                phone = info["phone"]                city = info.get("city""未知"or"未知"                email = info.get("email""无"or"无"                print(f"  {i:<4}{name:<8}{phone:<18}{city:<8}{email:<20}")            print("  " + "-" * 58)            print(f"  共 {len(contacts)} 位联系人")            city_count = {}for info in contacts.values():                city = info.get("city""未知"or"未知"                city_count[city] = city_count.get(city, 0) + 1            city_info = "、".join(f"{c}{n}人"for c, n in city_count.items())            print(f"  城市分布:{city_info}")elif choice == "3":        print("【查找联系人】(明天实现)")elif choice == "4":        print("【修改联系人】(明天实现)")elif choice == "5":        print("【删除联系人】(明天实现)")else:        print("⚠️ 无效输入,请输入 0-5 之间的数字")

⚠️ 常见坑

  1. 忘记strip()导致空格干扰
    name = input("请输入姓名:")       # 用户可能输入 "  小王  "name = input("请输入姓名:").strip() # ✅ 清理空白
  2. if not contacts判断字典是否为空
    # ✅ 正确:空字典的布尔值是 Falseifnot contacts:    print("通讯录为空")# 也可以,但不简洁# if len(contacts) == 0:
  3. input()返回的永远是字符串
    choice = input("请选择:")    # 用户输入 1,choice 是 "1" 不是 1# 所以用 choice == "1" 而不是 choice == 1
  4. 格式化输出时中英文混排对齐困难
    # 中文字符占2个显示宽度,但Python计算长度时算1个# 简单项目中用足够宽度"差不多对齐"即可# 完美对齐需要额外处理,目前不纠结

✍️ 实战练习

  1. 运行完整代码并测试
    • 选择 2,查看预设的3个联系人
    • 选择 1,添加"赵六",电话"136-0004-0004",城市"深圳",邮箱"zhaoliu@qq.com"
    • 选择 2,确认赵六已添加,且城市统计正确
    • 选择 1,输入"小王"(已存在),选择不覆盖,确认取消
    • 选择 1,姓名直接回车,确认提示"不能为空"
    • 要求:把上面的代码复制到编辑器中运行,依次测试添加和查看功能。
    • 测试用例:
  2. 加强输入验证
    • 电话不能为空(已在代码中实现)
    • 邮箱如果填写了,必须包含@(已在代码中实现)
    • 新增:城市如果为空,自动设为"未知"
    • 要求:在添加联系人时,增加以下验证:
    • 提示:
      city = input("  请输入城市:").strip()ifnot city:    city = "未知"
  3. 美化输出
    • 要求:修改查看联系人的输出,增加分隔符、对齐调整等,让表格更美观。
    • 提示:尝试修改print("  " + "-" * 58)中的分隔符为=+,看看效果。
  4. 思考题
    • 如果要支持一个联系人有多个电话号码,数据结构该怎么改?
    • 如果要支持按城市筛选联系人,代码该怎么写?
    • (这些思考会在 Day14 的拓展中涉及)

✅ 自测清单

  • [ ] 能回顾列表、字典、字符串方法、元组、集合的核心用法
  • [ ] 能对项目做需求分析,拆解成小模块
  • [ ] 能选择合适的数据结构(字典嵌套字典)存储通讯录数据
  • [ ] 能搭建主菜单循环框架(while True+input+if/elif
  • [ ] 能实现添加联系人功能,处理重名和空值情况
  • [ ] 能实现查看所有联系人功能,用格式化输出表格
  • [ ] 理解用标志变量can_add控制流程,避免深层嵌套
  • [ ] 理解input()返回字符串,所以用choice == "1"而非choice == 1

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-07-03 02:29:34 HTTP/2.0 GET : https://f.mffb.com.cn/a/496011.html
  2. 运行时间 : 0.367495s [ 吞吐率:2.72req/s ] 内存消耗:4,513.78kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=ff0a3be14fa30e7c1c6209642a370706
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000562s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000916s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.006295s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.010454s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000701s ]
  6. SELECT * FROM `set` [ RunTime:0.010344s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000682s ]
  8. SELECT * FROM `article` WHERE `id` = 496011 LIMIT 1 [ RunTime:0.026645s ]
  9. UPDATE `article` SET `lasttime` = 1783016974 WHERE `id` = 496011 [ RunTime:0.000746s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.009243s ]
  11. SELECT * FROM `article` WHERE `id` < 496011 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.007464s ]
  12. SELECT * FROM `article` WHERE `id` > 496011 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.002463s ]
  13. SELECT * FROM `article` WHERE `id` < 496011 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.082162s ]
  14. SELECT * FROM `article` WHERE `id` < 496011 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.073096s ]
  15. SELECT * FROM `article` WHERE `id` < 496011 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.060619s ]
0.369818s