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

如何通过用户输入'y'重启游戏?已创建游戏后自定义函数

实现游戏重启功能的修复方案

看起来你已经搭好了重启功能的框架,但代码里有几个小细节问题导致功能没法正常工作,我来帮你一步步调整好:

现有代码的核心问题

  1. 全局变量未正确声明:在done()函数里修改i时,Python会默认把它当成局部变量,没法修改全局的i值,导致重启信号传不到外层循环。
  2. 退出方式错误:SystemExit是一个异常类,直接写不会触发退出,得用sys.exit(),还要记得导入sys模块。
  3. 输入兼容性不足:只判断小写的'y'/'n',用户输入大写的话就会失效,最好统一转成小写处理。
  4. 循环逻辑衔接问题:当前的while i==1循环在一次游戏结束后会因为i=0直接退出,得确保重启时能让循环重新跑起来。

修改后的完整代码

import sys

i = 1

def done():
    global i  # 声明要操作全局变量i
    quit_value = input("Play Again?(y/n):").strip().lower()  # 去除空格并统一转小写
    if quit_value == 'n':
        sys.exit()  # 正确终止程序
    elif quit_value == 'y':
        i = 1  # 将i设为1,触发循环重启

def rps(play1, play2, play1name, play2name):  # 把玩家名字作为参数传入,避免依赖全局变量
    # 胜负判定逻辑
    if play1 == play2:
        print("It's a tie!")
    elif play1 == 'r':
        print(f"{play1name} Wins!" if play2 == 's' else f"{play2name} Wins!")
    elif play1 == 'p':
        print(f"{play1name} Wins!" if play2 == 'r' else f"{play2name} Wins!")
    elif play1 == 's':
        print(f"{play1name} Wins!" if play2 == 'p' else f"{play2name} Wins!")
    done()  # 胜负判定后调用重启选择函数

# 游戏主循环
while True:  # 改用无限循环,逻辑更直观
    if i == 1:
        play1name = input("Player 1 Name?:").strip()
        play2name = input("Player 2 Name?:").strip()
        play1 = input(f"{play1name} Choose Rock(r),Paper(p), Scissors(s):").strip().lower()
        play2 = input(f"{play2name} Choose Rock(r),Paper(p), Scissors(s):").strip().lower()
        i = 0  # 标记当前游戏结束
        rps(play1, play2, play1name, play2name)

关键修改说明

  • 全局变量声明:在done()开头加global i,确保函数能修改全局的i,这样选'y'时才能正确触发循环重启。
  • 输入体验优化:用strip()去掉输入前后的空格,lower()统一转小写,用户输入'Y'或者带空格的'y'都能识别。
  • 函数模块化:把玩家名字作为参数传入rps(),避免依赖全局变量,代码结构更清晰。
  • 循环结构调整:改用while True无限循环,配合i的状态控制游戏启动,逻辑更易懂。
  • 正确退出程序:用sys.exit()替代无效的SystemExit写法,确保选'n'时能正常退出。

这样修改后,游戏结束时输入'y'就会回到玩家输入名字的环节重新开始,输入'n'则直接终止程序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:47:41