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

Python新手实现石头剪刀布游戏 输入后无响应问题排查

石头剪刀布程序无输出问题修复

代码问题排查

  • 核心问题:main()函数执行完对局逻辑后,仅用return返回结果字符串,没有做终端打印,也没有变量接收返回值,结果自然不会显示
  • 冗余错误:入口块里多余的win()调用没有传入要求的2个参数,运行到这行会触发位置参数缺失的报错,如果你是双击直接运行py文件,报错窗口会快速闪退,看起来就像程序没反应
  • 逻辑不严谨:win()函数只在用户获胜时返回True,失败场景没有显式返回值,Python默认会返回None,虽不影响当前判断,但属于不规范写法

修复后完整代码

import random

def main():
    user = input("Choose 'r' for rock, 'p' for paper or 's' for scissors ").strip().lower()
    # 输入校验,避免用户输入非法内容
    if user not in ('r', 'p', 's'):
        print("Invalid input! Please only enter 'r', 'p' or 's'.")
        return
    comp = random.choice(['r', 's', 'p'])
    # 打印双方选择,方便核对结果
    print(f"\nYour choice: {user}\nComputer choice: {comp}")
    if user == comp:
        print("Result: Tie")
        return
    if win(user, comp):
        print("Result: You win!")
    else:
        print("Result: You lose!")

def win(player, computer):
    # 获胜规则:石头克剪刀、布克石头、剪刀克布
    win_rule = (
        (player == 'r' and computer == 's'),
        (player == 'p' and computer == 'r'),
        (player == 's' and computer == 'p')
    )
    return any(win_rule)

if __name__ == '__main__':
    main()

改动说明

  • 所有对局结果、双方选择都直接通过print()输出到终端,用户输入后可直接看到完整反馈
  • 删除了入口处冗余的win()错误调用,避免闪退问题
  • 给win()函数补全了明确的布尔返回值,逻辑更清晰
  • 增加了输入预处理(去空格、转小写)和合法性校验,兼容用户不小心输入大写、带空格的场景
  • 优化了结果提示的可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:45:29