2017-04-12 123 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。