2017-04-12 231 views
-1

所以我写一个简单的游戏,在这些线路存在:的Python冻结在While循环

import random 

def Start(): 

    print "STEP1.1" #Print statements for debugging 

    door1 = random.randint(1,3) 
    door2 = random.randint(1,3) 
    door3 = random.randint(1,3) 

    print "STEP1.2" 

    while door1 == door2: 
     door2 == random.randint(1,3) 

    print "STEP1.3" 

    while door1 == door3 or door2 == door3: 
     door3 = random.randint(1,3) 

    print 'STEP1.4' 

此代码是为了1号和3之间给door1door2,并且door3随机唯一值停止对步1.3工作,因为它打印直到步骤1.2,然后用闪烁的光标(不打印STEP1.3)这个失败冻结,但

x = 0 
while x < 100: 
    print "HI, IM ",x 
    x = x + 1 

打印的一切,直到HI I'M 99然后停止,有在它前面工作。

我正在使用Python 2.7。有时代码会起作用,并为每个门提供随机唯一的值,但它通常也会崩溃。

+8

在第一while循环使用的是'门2 == random.randint(1,3)'。它会生成一个随机数并检查相等性,但它不会设置'door2'的值。这就是无限循环的原因 – kuro

+0

@kuro为什么它没有设置door2的值?有一个等号,它是一个while循环,所以当door2与door1不同时,循环会中断? – techgenius101

+1

@ techgenius101编号'=='表示测试两个值是否相等。为了给门2赋值,你应该使用'door2 = random.randint(1,3)'(简单的'=') – Dunatotatos

回答

2

在第一个while循环中,您在步骤1.2之后使用door2 == random.randint(1,3)==检查双方是否相等,而=将值分配给变量。因此,在您的情况下,randint会生成一个随机数并检查相等性,但它不会设置door2的值。

这可能是自己与正确的代码一个简单的拼写错误应该是

door2 = random.randint(1,3) 
+0

他实际上应该接受他的回答。请做。 – TasosGlrs

2

在第一while循环... 而门1 ==门2: 门2 == random.randint(1,3) 您正在使用的比较操作==。它应该是=。这是造成问题的原因。

2

如果door1等于door2,则检查(使用==),如果door2是范围(1,3)中的随机int。因为这是正确的,你循环到无限。最好使用a =而不是==来为范围(1,3)中的门2分配一个新的随机int。