簡體   English   中英

如何修復Python中的無限循環?

[英]How to fix infinite loop in Python?

我正在用Python開發一個登錄安全程序,而這部分總是陷入無限循環中。 如果您被鎖定,它會一直說“您已被鎖定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:") 
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

容易,改變

  while tries>=4:

  if tries >= 4:

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

tries大於4時,您的第二個while循環會激活,但是循環本身永遠不會對tries或包含任何其他退出條件。 這就是為什么它變得無限大的原因。 因此tries保持在4以上,循環永遠不會停止。

從您的代碼看來,在他們用盡嘗試之后,他們被鎖定了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

我認為您應該在睡眠后將try設置為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM