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

仅用函数实现Rock, Paper, Scissors程序遇运行问题,求技术指导

石头剪刀布程序问题排查与修复

核心问题梳理

你的代码无法正常运行,主要是以下几个关键问题导致的:

  • 变量未传递:调用user_choice()和computer_choice()时,没有保存它们的返回值,get_winner()里直接引用函数名(而非函数返回的选择值),根本没法正确比较两者的选择。
  • get_winner()缺少参数:这个函数需要接收用户和电脑的选择作为输入,当前没有参数,完全获取不到外部的选择结果。
  • 错误输入处理失效:user_choice()的else分支只写了("Try again."),既没打印提示,也没强制用户重新输入,错误输入会直接返回None,导致后续逻辑报错。
  • 逻辑结构冗余混乱:computer_choice()用多个独立if判断,虽能运行但不够规范;get_winner()重复判断用户选择的条件,不仅冗余还容易引发逻辑错误。

修复后的完整代码

import random 

def user_choice():
    while True:
        user_input = input("Choose rock, paper, or scissors: ")
        # 统一转小写,简化判断条件
        lower_input = user_input.lower()
        if lower_input in ["rock", "r"]:
            return "r"
        elif lower_input in ["paper", "p"]:
            return "p"
        elif lower_input in ["scissors", "s"]:
            return "s"
        else:
            print("Try again. Please enter a valid choice like rock/paper/scissors or r/p/s.")

def computer_choice():
    comp_num = random.randint(1,3)
    if comp_num == 1:
        return "r"
    elif comp_num == 2:
        return "p"
    else:
        return "s"

def get_winner(user_pick, comp_pick):
    # 用字典存储胜负规则,简化逻辑
    result_map = {
        ("r", "r"): "It's a tie! Both chose rock.",
        ("r", "p"): "Computer wins! Paper covers rock.",
        ("r", "s"): "You win! Rock crushes scissors.",
        ("p", "r"): "You win! Paper covers rock.",
        ("p", "p"): "It's a tie! Both chose paper.",
        ("p", "s"): "Computer wins! Scissors cuts paper.",
        ("s", "r"): "Computer wins! Rock crushes scissors.",
        ("s", "p"): "You win! Scissors cuts paper.",
        ("s", "s"): "It's a tie! Both chose scissors."
    }
    print(result_map.get((user_pick, comp_pick), "Error: Invalid choice detected"))

# 主程序:保存选择并传递给判断函数
user_pick = user_choice()
comp_pick = computer_choice()
get_winner(user_pick, comp_pick)

关键修复说明

  1. 保存函数返回值:将用户和电脑的选择结果赋值给变量,再传递给get_winner(),确保判断函数能拿到有效数据。
  2. 给get_winner()添加参数:明确接收用户和电脑的选择作为输入,解决无数据可判断的问题。
  3. 完善输入校验:用while True循环强制用户输入有效选项,同时通过lower()统一转小写,减少重复判断。
  4. 简化胜负逻辑:用字典存储所有胜负组合,替代多层嵌套的if-elif,代码更简洁易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 03:10:17