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

