Python中的随机选择失败

时间:2018-07-29 04:00:48

标签: python python-3.x

我正在尝试使其在questnum == 3之后结束。但是,在第一个任务标记之后显示的内容是这样的:

1:

Stage 3.


x
x
x
x
x
x
x

这永远发生。我不知道发生了什么事,所以请帮帮我。它在x / y代码中的某处,因为我已经将其注释掉并且可以正常工作。这是我的代码:

import random

end = False
x = 0
choice = 0
moon = input("x or y? ")
quest = False
currentquest = 0
queststage = 1
questnum = 0
while(True):
    choice = random.randint(1,3)
    if(choice <= 2 and moon.upper() == "X"):
        print("x")
    elif(choice <= 2 and moon.upper() == "Y"):
        print("y")
    if(choice == 3):
        if(quest == False):
            currentquest = random.randint(1,3)
            if(currentquest == 1):
                #Quest 1
                print("1:\n")
                print("Stage 1.\n\n")
                quest = True
            elif(currentquest == 2):
                #Quest 2
                print("2:\n")
                print("Stage 1.\n\n")
                quest = True
            elif(currentquest == 3):
                #Quest 3
                print("3:\n")
                print("Stage 1.\n\n")
                quest = True
        #Continue Quest
        elif(quest == True):
            #Quest 1
            if(currentquest == 1):
                if(queststage == 1):
                    queststage = 2
                    print("1:\n")
                    print("Stage 2.\n\n")
                elif(queststage == 2):
                    queststage = 3
                    print("1:\n")
                    print("Stage 3.\n\n")
                    quest = False
                    questnum += 1
            #Quest 2
            elif(currentquest == 2):
                if(queststage == 1):
                    queststage = 2
                    print("2:\n")
                    print("Stage 2.\n\n")
                elif(queststage == 2):
                    queststage = 1
                    print("2:\n")
                    print("Stage 3.\n\n")
                    quest = False
                    questnum += 1
            #Quest 3
            elif(currentquest == 3):
                if(queststage == 1):
                    queststage = 2
                    print("3:\n")
                    print("Stage 2.\n\n")
                elif(queststage == 2):
                    queststage = 1
                    print("3:\n")
                    print("Stage 3.\n\n")
                    quest = False
                    questnum += 1
    if(questnum == 3):
        print("Complete.")
        break

该代码段不起作用,以这种方式放置起来更容易。

2 个答案:

答案 0 :(得分:1)

如果您在while循环之后添加一行print(choice,quest,currentquest,queststage,questnum),您将看到原因。

结果是

3 True 3 3 2
1 True 3 3 2
x
3 True 3 3 2
3 True 3 3 2
1 True 3 3 2
x
2 True 3 3 2
x
1 True 3 3 2
x
3 True 3 3 2
1 True 3 3 2
x
1 True 3 3 2
x
3 True 3 3 2
2 True 3 3 2
x
2 True 3 3 2
x
3 True 3 3 2
1 True 3 3 2
x
3 True 3 3 2
3 True 3 3 2

重新检查您的代码,循环中没有quest=Truecurrentquest=3queststage=3questnum=2的语句。

因此它将陷入无限循环。

答案 1 :(得分:0)

您的break语句位于if语句内,不会中断您执行的forever循环。如果暂时将True更改为变量,可以在最终的if语句中切换。