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
相关产品推荐
相关产品推荐

