入门Python:请求精简优化石头剪刀布代码(学习第3天)
石头剪刀布代码精简优化方案
先看优化后的代码:
from random import choice # 定义胜负映射:键是玩家选择,值是该选择能击败的选项 win_against = { "rock": "scissors", "paper": "rock", "scissors": "paper" } valid_moves = list(win_against.keys()) while True: player_input = input("选择石头(rock)、布(paper)、剪刀(scissors),输入'end'结束游戏:").strip().lower() # 处理游戏结束请求 if player_input == "end": print("游戏结束") break # 输入合法性验证 if player_input not in valid_moves: print("输入有误,请检查拼写后重试") continue # 电脑随机选择出拳 computer_move = choice(valid_moves) # 判断对局结果 if player_input == computer_move: print("平局!") elif win_against[player_input] == computer_move: print(f"你赢了!{player_input}击败{computer_move}") else: print(f"你输了!{computer_move}击败{player_input}")
精简优化的核心思路及解释
- 替换随机选值方式:用
random.choice()直接从合法选项列表里选元素,比原代码用randint生成索引再取值更直观,避免手动维护索引与选项的对应关系。 - 用字典消除重复判断:原代码针对每个玩家选择写了重复的输赢判断逻辑,现在通过字典
win_against存储胜负映射,只需一次字典查询就能判断输赢,后续如果要扩展游戏选项(比如加蜥蜴、史波克),仅需修改字典即可,大幅降低维护成本。 - 提前做输入验证:把输入合法性检查提前到电脑出拳前,不合法直接进入下一轮循环,减少代码嵌套层级,逻辑更清晰。
- 简化输出格式:用f-string格式化输出语句,比原代码多个参数拼接的方式更简洁易读。
- 变量命名更清晰:把模糊的变量名
player改为player_input,moves改为valid_moves,提升代码可读性。
内容的提问来源于stack exchange,提问作者MoRayhxn
相关产品推荐
相关产品推荐

