You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python入门代码优化需求:为击杀生物程序增加多样性及优化建议

代码优化与多样性提升指南

一、增加代码多样性的思路

  • 整合数据结构:把分散的三个列表改成字典或数据类,让生物的emoji、名称、点数绑定在一起,逻辑更清晰,后续新增生物也更方便。
  • 支持多输入方式:除了输入名称,还允许输入emoji或者序号,比如用户输入👽或者1就能选中alien,提升交互灵活性。
  • 多轮交互逻辑:允许用户连续击杀生物,直到输入"quit"退出,让程序更有可玩性。
  • 加入随机元素:比如每次击杀的点数在基础值上下浮动,或者随机刷新可选生物,增加不确定性。
  • 美化输出:用分隔线、简单的颜色标记(比如点数用绿色),让输出更直观。

二、性能优化方向

  • 用字典替代列表查找:原代码用creaname.index()是线性查找(O(n)),换成字典映射后,查找速度是常数级(O(1)),数据量越大优势越明显。
  • 用集合做合法性校验:判断输入是否合法时,集合的in操作比列表快很多,适合做快速校验。
  • 减少重复操作:原代码多次通过索引取数据,整合后一次获取所有相关信息,避免重复计算。

三、修改后的示例代码

import random

# 用字典整合所有生物数据,key设为名称和emoji,方便多输入匹配
creatures_data = {
    "alien": {"emoji": "👽", "points": 5},
    "zombie": {"emoji": "🧟", "points": 10},
    "elf": {"emoji": "🧝", "points": 15},
    "👽": {"emoji": "👽", "points": 5, "name": "alien"},
    "🧟": {"emoji": "🧟", "points": 10, "name": "zombie"},
    "🧝": {"emoji": "🧝", "points": 15, "name": "elf"}
}

# 预存合法输入集合,快速校验
valid_inputs = set(creatures_data.keys())

print("=== 可击杀生物列表 ===")
# 遍历唯一的生物名称(避免重复输出emoji对应的条目)
for name in ["alien", "zombie", "elf"]:
    info = creatures_data[name]
    print(f"- {info['emoji']} ({name}):{info['points']}点")

while True:
    kill_choice = input("\n选择要击杀的生物(输入名称/emoji,或quit退出):").lower().strip()
    if kill_choice == "quit":
        print("游戏结束!")
        break
    if kill_choice not in valid_inputs:
        print("无效选择,请重新输入!")
        continue
    
    # 直接从字典取数据,无需索引查找
    target = creatures_data[kill_choice]
    # 加入随机点数浮动(±2)
    earned_points = target["points"] + random.randint(-2, 2)
    # 确保点数不为负
    earned_points = max(earned_points, 1)
    print(f"✅ 击杀了{target.get('name', kill_choice)} {target['emoji']},获得+{earned_points}点!")

额外说明

  • 上面的代码用字典实现了多输入匹配,同时加入了随机点数和多轮交互,比原代码更灵活有趣。
  • 如果是Python 3.7+,可以考虑用dataclasses来定义生物类,结构会更严谨,适合后续扩展复杂属性。

内容的提问来源于stack exchange,提问作者user24663490

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:20:41