2015-11-07 63 views
0

我正在用Python做一個登錄安全程序,並且這部分總是陷入無限循環。如果你被鎖定,它會一直說「你被鎖定了10秒」,並且它無限循環。我該如何解決?如何修復Python中的無限循環?

tries=0 
while finalusername!=username or finalpassword!=password: 
tries=tries+1 
print "That incorrect. Try again." 
print "You have", 5-tries, "tries left." 
finalusername= raw_input ("Username:") 
finalpassword= raw_input ("Password:") 
while tries>=4: 
    print "You have been locked out for 10 seconds. Please call the administrator if this keeps happening." 
    sleep (10.0) 
    system ('CLS') 
    finalusername!=username 
    finalpassword!=password 
+0

你壓痕顯然是錯誤的。這會產生語法錯誤。 – jpmc26

回答

0

你的第二個while環激活時tries大於4,但循環本身永遠運行在tries或包含其他退出條件。這就是爲什麼它變得無限。所以tries仍然高於四,循環不會停止。

從你的代碼,在我看來,他們使用了他們的嘗試後,他們會被鎖定爲10秒鐘,然後他們得到重新開始?如果是這樣你想這樣調整你的代碼:

tries=0 
while finalusername!=username or finalpassword!=password: 
    tries=tries+1 
    print "That incorrect. Try again." 
    print "You have", 5-tries, "tries left." 
    finalusername= raw_input ("Username:") 
    finalpassword= raw_input ("Password:") 
    if tries>=4: 
     print "You have been locked out for 10 seconds. Please call the administrator if this keeps happening." 
     sleep (10.0) 
     system ('CLS') 
     tries = 0 #Reset tries counter 
     finalusername!=username #I don't think this part is required 
     finalpassword!=password #I don't think this part is required 
0

容易,改變

while tries>=4: 

if tries >= 4: 

如果你按照你的代碼,當你進入你的第二個while循環,變量嘗試的值不會改變,所以你會留在那裏永恆。如果你將while改爲if,你將執行if語句的主體,然後繼續你的循環。

0

我覺得你應該設置嘗試0後睡眠,如果沒有必要的循環。睡眠後用戶應該再次嘗試5次。

import os 
import time 

tries=0 
finalusername, finalpassword= 'a', 'a' 
username, password = None, None 


while True: 
    finalusername= raw_input ("Username:") 
    finalpassword= raw_input ("Password:") 
    if finalpassword == username and finalpassword == password: 
     break 
    tries=tries+1 
    print "That incorrect. Try again." 
    print "You have", 5-tries, "tries left." 
    if tries>=5: 
     print "You have been locked out for 10 seconds. Please call the administrator if this keeps happening." 
     time.sleep (10.0) 
     os.system('cls') 
     tries = 0