没有重新启动程序和输入整数不起作用

Posted

技术标签:

【中文标题】没有重新启动程序和输入整数不起作用【英文标题】:not restarting for program and input integer not working 【发布时间】:2018-03-31 04:15:36 【问题描述】:

我正在尝试开发一个程序,其中在游戏结束时用户将输入“是”以使游戏重新开始,而如果用户输入“否”则游戏将结束。对于我的尝试,我似乎无法弄清楚如何使程序工作。我很不确定是否可以使用 double while True 。此外,似乎当我输入一个整数时,游戏突然不起作用,但是当我输入一个无效输出时,消息“错误,输入的值无效,重试”似乎工作正常。急需帮助,谢谢!!

import random
A1=random.randint(0,9)
A2=random.randint(0,9)
A3=random.randint(0,9)
A4=random.randint(0,9)


P1="O"
P2="O"
P3="O"
P4="O"


while True:
    while True:
            try:
                P1=="O" or P2=="O" or P3=="O" or P4=="O"

            print("Here is your Clue :) :", P1,P2,P3,P4)


            guess=int(input("\nTry and Guess the Numbers :). "))


        except ValueError:
            print("Error, the inputed value is invalid, try again")

            continue


        else:

            guess1=int(guess[0])
            guess2=int(guess[1])
            guess3=int(guess[2])
            guess4=int(guess[3])



        if guess1==A1:
            P1="X"
        else:
            P1="O"

        if guess2==A2:
            P2="X"
        else:
            P2="O"

        if guess3==A3:
            P3="X"
        else:
            P3="O"

        if guess4==A4:
            P4="X"
        else:
            P4="O"

else:
        print("Well Done! You Won MASTERMIND! :D")

answer=input("Would you like to play again? (Yes or No) ")

if answer==Yes:
        print ('Yay')
        continue
else:
        print ('Goodbye!')
        break

【问题讨论】:

我建议你编辑你的帖子,专注于你遇到问题的代码的一小部分,而不是粘贴整个程序。 @rwp 我不同意。一般来说,是的,但是有跨越这段代码长度的错误,所以拥有完整的代码是看到这一点的唯一方法。 我建议您创建一个最小示例(模型),在其中放置虚拟游戏而不是真实游戏,并尝试使重复/停止逻辑到位。 【参考方案1】:

将您的游戏包装在一个函数中,例如:

import sys

def game():
    #game code goes here#

然后最后调用函数重启游戏。

if answer=='Yes': # You forgot to add single/double inverted comma's around Yes
    print ('Yay')
    game() # calls function game(), hence restarts the game 
else:
    print ('Goodbye!')
    sys.exit(0) # end game

【讨论】:

这是一个很好的起点。游戏代码中还有其他问题需要解决。【参考方案2】:

试试这个

import random
def game():
    A1=random.randint(0,9)
    A2=random.randint(0,9)
    A3=random.randint(0,9)
    A4=random.randint(0,9)

    P1="O"
    P2="O"
    P3="O"
    P4="O"

    gueses=[]
    while len(gueses)<=3:
            try:
                P1=="O" or P2=="O" or P3=="O" or P4=="O"

                print("Here is your Clue :) :", P1,P2,P3,P4)


                guess=int(input("\nTry and Guess the Numbers :). "))
                gueses.append(guess)


            except ValueError:
                print("Error, the inputed value is invalid, try again")

                continue
    guess1=gueses[0]
    guess2=gueses[1]
    guess3=gueses[2]
    guess4=gueses[3]
    if guess1==A1:
            P1="X"
    else:
            P1="O"

    if guess2==A2:
            P2="X"
    else:
            P2="O"

    if guess3==A3:
            P3="X"
    else:
            P3="O"
    if guess4==A4:
            P4="X"
    else:
            P4="O"
    if P1=="x" and P2=="x" and P3=="x" and P4=="x":
        print("you won")
    else:
        print("YOUE LOSE")
    print("TRUE ANSWERS", A1,A2,A3,A4)
    print("YOUR ANSWER", gueses)
game()
answer=input("Would you like to play again? (Yes or No) ")

if answer=="Yes":
        print ('Yay')
        game()
else:
    print ('Goodbye!')

【讨论】:

【参考方案3】:

前面的答案是好的开始,但缺少其他一些重要问题。正如其他人所说,我会首先将您的游戏代码包装在一个函数中并递归调用它。 guess=int(input("\nTry and Guess the Numbers :). ")) 中还有其他问题。这需要一个整数作为输入,而不是整数数组。最简单的解决方案是将其变成 4 个单独的提示,每个提示一个。我也会缩小你的错误测试的范围。我已经包含了工作代码,但我会通读它并确保您了解逻辑和调用流程。

import random
def game():
  A1=random.randint(0,9)
  A2=random.randint(0,9)
  A3=random.randint(0,9)
  A4=random.randint(0,9)

  P1="O"
  P2="O"
  P3="O"
  P4="O"

  while True:
    if P1=="O" or P2=="O" or P3=="O" or P4=="O":
      print("Here is your Clue :) :")
      print(P1,P2,P3,P4)
      try:
        guess1=int(input("\nGuess 1 :). "))
        guess2=int(input("\nGuess 2 :). "))
        guess3=int(input("\nGuess 3 :). "))
        guess4=int(input("\nGuess 4 :). "))
      except ValueError:
        print("Invalid Input")
        continue

      if guess1==A1:
        P1="X"
      else:
        P1="O"

      if guess2==A2:
        P2="X"
      else:
        P2="O"

      if guess3==A3:
        P3="X"
      else:
        P3="O"

      if guess4==A4:
        P4="X"
      else:
        P4="O"

    else:
      print("Well Done! You Won MASTERMIND! :D")
      break
  answer=input("Would you like to play again? (Yes or No) ")
  if answer=="Yes":
    print('Yay')
    game()
  else:
    print('Goodbye!')
game()

【讨论】:

以上是关于没有重新启动程序和输入整数不起作用的主要内容,如果未能解决你的问题,请参考以下文章

更新的启动/启动不起作用

在重新启动应用程序不起作用时设置权限

驱动程序重新启动后 Spark Streaming 检查点不起作用

在MSI安装期间重新启动Explorer.exe不起作用

使用 UserDefaults() 自动登录不起作用 Swift 5

Angular 在应用程序启动中不起作用