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

入门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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:10:32