Python: 你如何让一个变量 = 1 并且它在不同的 def 块中仍然是这样? (对于游戏)

Python: How do you make a variable = 1 and it still being that way in a different def block? (For a game)

我有一个问题。即使在不同的 def 函数中,你如何让变量保持定义?我有一个功能,目的是查看有多少 AIs a user wants,例如,如果他们选择 'One' 作为他们想要的 AI 数量 AI1 would be equal 1。这里是定义 AI1 的地方:

def AISection():#Same as line 1
    global AI1, AI2, AI3
    print("How many AIs do you want to play with?\nChoices:\n1. One\n2. Two\n3. Three")
    #Asks user next question.
    while(True):
    #Same as line 4.
        UserInput = input("Answer goes here:")
        #same as line 6
        if(UserInput in ['ONE', 'One', 'one']):
        #Same as line 8
            AI1 = 1
            #Only AI1 will be activated.
            break
            #Same as line 

所以如果他们 choose 'One' 只有 AI1 will be equal to 1。那么一旦发生这种情况,用户将能够 select 他们想要多少张卡片。这是基于他们想要激活多少 AI 因此,在上一段中 One 将被 selected 因此他们可以在下面的代码中从 3 种不同的卡金额中进行选择:

def CardsSection():#Same as line 1
    global AI1, AI2, AI3#Makes sure the AIs are equal to something
    print("How many cards do you want in your hand?")
    #Asks the user for an amount of cards the users wants.
    if(AI1 == 1) and (AI2 == 2):
    #If they choose 2 AIs.
        print("Choices:\n1. Four\n2. Six\n3. Eight")
        #This is so an even amount of cards will be distributed from the deck.
    elif(AI1 == 1) or (AI1 == 1) and (AI3 == 3):
    #If they choose 1 AI or 3 AIs.
        print("Choices:\n1. Five\n2. Seven\n3. Nine")
        #Same is line 68.

但是当我 运行 代码到达 def CardsSection (AISection 之后的部分,其中定义了 AI1)。然后报错:

Traceback (most recent call last):
  File "python", line 81, in <module>
  File "python", line 68, in CardsSection
NameError: name 'AI1' is not defined

问题是我定义了 AI1 = 1 但我的代码无法识别它。我认为这是因为它是在不同的定义中定义的。我想如果我使用全局 "Module" 无论我将 AI1、AI2 和 AI3 设置为等于它们都会是这样,而不管我在哪个 def 函数中。我怎样才能做到无论我在哪里设置 AI1, AI2 和 AI3 等于(在本例中为 AISection),它们会这样不管我在哪里?这是我到目前为止的完整代码:

def StartSection():#The starting section.
    print("Do you want to play?\nChoices:\n1. Yes\n2. No")
    #Asks the user a question.
    while(True):
        #Loops if user doesn't answer properly. 
        UserInput = input("Answer goes here:")
        #Prompts the users.
        if(UserInput in ['YES', 'Yes', 'yes']): 
        #If user says yes.
            print("Great! Now choose your 'AI Settings'.")
            #Praises the user & tells user about next prompt.
            break
            #Stops the loop. Continues to next prompt.
        elif(UserInput in ['NO', 'No', 'no']): 
            #Else, if User says no.
            print("Bye bye!")
            #Farewells to the user.
            quit() 
            #Ends Code.
        else:
        #Else user types neither 'Yes' or 'No'.
            print("That is not a choice! Please try again.")
            #Tells user to choose again.
            print("Here are the choices:\n1. Yes\n2. No")
            #Tells user their choices again; goes back to start.
StartSection()#Ends the section of code.
def AISection():#Same as line 1
    global AI1, AI2, AI3
    print("How many AIs do you want to play with?\nChoices:\n1. One\n2. Two\n3. Three")
    #Asks user next question.
    while(True):
    #Same as line 4.
        UserInput = input("Answer goes here:")
        #same as line 6
        if(UserInput in ['ONE', 'One', 'one']):
        #Same as line 8
            AI1 = 1
            #Only AI1 will be activated.
            break
            #Same as line 12
        elif(UserInput in ['TWO', 'Two', 'two']):
        #Same as line 14
            AI1 = 1
            AI2 = 2
            #AI1 and AI2 are activated. AI3 is not activated.
            break
            #Same as line 12
        elif(UserInput in ['THREE', 'Three', 'three']):
        #Same as line 14
            AI1 = 1
            AI2 = 2
            AI3 = 3
            #All 3 AIs are activated.
            break
            #Same as line 12
        else:
            print("That is not a choice! Pleasse try again.")
            #Same as line 22
            print("Here are your choices:\n1. One\n2. Two\n3. Three")
            #Same as line 24
    print("You selested %s AIs" % (UserInput[0].upper()+UserInput[1::1].lower()))
    #Tells the user that what they select while keeping it in a upper-lower case fashion.
AISection()#Same as line 26
def CardsSection():#Same as line 1
    global AI1, AI2, AI3#Makes sure the AIs are equal to something
    print("How many cards do you want in your hand?")
    #Asks the user for an amount of cards the users wants.
    if(AI1 == 1) and (AI2 == 2):
    #If they choose 2 AIs.
        print("Choices:\n1. Four\n2. Six\n3. Eight")
        #This is so an even amount of cards will be distributed from the deck.
    elif(AI1 == 1) or (AI1 == 1) and (AI3 == 3):
    #If they choose 1 AI or 3 AIs.
        print("Choices:\n1. Five\n2. Seven\n3. Nine")
        #Same is line 68.
    else:
        print("Something didn't go right!")
        #If they happened to choose neither 1, 2, or 3 AIs.
        return StartSection()
        #Returns them basck to start.
CardsSection()

希望对您有所帮助:)。

我相信您正面临一个 scope 问题,尽管您将其定义为全局的,但您并没有在函数之外定义它。如果您在任何函数之外定义这三个变量,那么您的程序似乎可以运行:

def AISection():
    global AI1, AI2, AI3
    AI1 = 0
    AI2 = 0
    AI3 = 0
    print("How many AIs do you want to play with?\nChoices:\n1. One\n2. Two\n3. Three")
    while True:
        UserInput = input("Answer goes here:")
        if UserInput.lower() == "one":
            AI1 += 1
            break

def CardsSection():
    global AI1, AI2, AI3
    print("How many cards do you want in your hand?")
    if AI1 == 1 and AI2 == 2:
        print("Choices:\n1. Four\n2. Six\n3. Eight")
    elif AI1 == 1 or AI1 == 1 and AI3 == 3:
          print("Choices:\n1. Five\n2. Seven\n3. Nine")

另请注意,虽然这不是代码审查,但我强烈建议使用 UserInput.lower() == "one" 而不是列表检查,这样会更有效率并接受更多答案("oNe" 例如,如果用户曾经想输入该答案)。

问题是您没有在 AISection() 中定义变量 AI1、AI2 或 AI3。您需要在那里将它们设置为 0,否则它们未定义。

def AISection():
    global AI1, AI2, AI3
    AI1 = 0
    AI2 = 0
    AI3 = 0
    print("How many AIs do you want to play with?\nChoices:\n1. One\n2. Two\n3. Three")
    while True:
        UserInput = input("Answer goes here:")
        if UserInput.lower() == "one":
            AI1 = 1
            break