Python 程序停留在while循环中,但不';不运行程序?

Python 程序停留在while循环中,但不';不运行程序?,python,while-loop,Python,While Loop,这是一个螃蟹模拟器。我的while循环有问题。上面写着 while val == True: 这就是问题所在。它停留在while循环中,但什么也没有发生。如果你有什么发现,我将不胜感激。 这是完整的代码。(我已尝试验证所有内容) 第一次运行程序后,x和val都是False,但z仍然是True。结果,外环继续滚动。将此线放在: print z, x, val 在while语句下面 您将看到,在用“2”回答“您想再次滚动吗:”问题后,x和val都是假的。这意味着它将遍历if..else语句的每一

这是一个螃蟹模拟器。我的while循环有问题。上面写着

while val == True:
这就是问题所在。它停留在while循环中,但什么也没有发生。如果你有什么发现,我将不胜感激。 这是完整的代码。(我已尝试验证所有内容)


第一次运行程序后,
x
val
都是
False
,但
z
仍然是
True
。结果,外环继续滚动。

将此线放在:

print z, x, val
在while语句下面


您将看到,在用“2”回答“您想再次滚动吗:”问题后,
x
val
都是假的。这意味着它将遍历if..else语句的每一部分,并继续无限循环。

在执行else分支(if x的
)后,它将陷入一个无止境的循环中,因为您将该值设置为False。在下一个迭代中,你说“代码>,而Val==Trime< /Cord>”,因为这个语句不是假的,并且有“强>不< /强>要考虑的其他语句,所以你运行在一个无休止的循环中。

要了解我的意思,只需在此处添加打印语句:

else:
    print val
    while val == True:
        roll_again = raw_input("Would you like to roll again: ")
        if roll_again == "1":
现在,我不知道你的实际程序是否需要所有这些布尔值,但是如果我想让它工作,我会开始消除我不需要的布尔值。我觉得你的结构太复杂了

编辑: 这里有一个使程序更简单的建议

import time
import random
x = True
z = True
def throw(n):
    for i in range(1,n+1):
        dice_1 = random.randint(1,6);dice_2 = random.randint(1,6)
        print "roll",i,", die 1 rolled",dice_1,"and die 2     rolled",dice_2,",total",dice_1+dice_2
        time.sleep(2)
    return n


def ask(x):
    if x: 
        print "Welcome to crabs."
    try:
        amount = int(raw_input("How many times would you like to roll:"))
    except ValueError:
        print ("Enter a valid number.")
    throw(amount)

while z:
    ask(x)
    x = False
    roll_again = raw_input("Would you like to roll again: ")
    if roll_again == "1":
        continue
    else:
        break

while z==True
可能会变成
while z
,因为它是相同的。无需“双重检查”布尔值;)您还应该为变量指定明确的名称…为了帮助调试,为什么不在每个
if
分支中执行简单的
print
,您的意思是您没有看到原始输入命令的提示吗?非常感谢您的帮助:)不客气。如果你的问题得到了回答,一定要接受答案。
import time
import random
x = True
z = True
def throw(n):
    for i in range(1,n+1):
        dice_1 = random.randint(1,6);dice_2 = random.randint(1,6)
        print "roll",i,", die 1 rolled",dice_1,"and die 2     rolled",dice_2,",total",dice_1+dice_2
        time.sleep(2)
    return n


def ask(x):
    if x: 
        print "Welcome to crabs."
    try:
        amount = int(raw_input("How many times would you like to roll:"))
    except ValueError:
        print ("Enter a valid number.")
    throw(amount)

while z:
    ask(x)
    x = False
    roll_again = raw_input("Would you like to roll again: ")
    if roll_again == "1":
        continue
    else:
        break