2016-09-29 72 views
0

如何讓我的while語句停止當用戶插入「孃家」 &退出程序。在用戶插入nee的時刻,它繼續運行程序並詢問(「Wilt u dit program gebruiken?ja/nee:」)3次。在它問了我3次之後,程序突然停止。while語句JA /東東

我想要的程序,當用戶插入JA運行和停止,當用戶插入的東東。

import time 
    import sys 

    print ("Check of uw wachtwoord veilig genoeg is in dit programma.") 
    time.sleep(1) 
    print ("Uw wachtwoord moet tussen minimaal 6 en maximaal 12 karakters 
    bestaan") 
    print ("U kunt gebruik maken van hoofdletters,getallen en symbolen 
    (@,#,$,%)") 


    klein = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 
    'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 
    groot = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 
    'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] 
    nummers = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'] 
    symbolen= [' ', '!', '#', '$', '%', '&', '"', '(', ')', '*', '+', ',', '-', 
    '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', 
    '{', '|', '}', '~',"'"] 


    def ok(passwd,l): 
     return any(k in passwd for k in l) # checkt of een letter in de lijst 
    in het wachtwoord zit. 

    while input("Wilt u dit programma gebruiken? ja/nee: ") == "ja" or input("Wilt u dit programma gebruiken? ja/nee: ") == "JA" or input("Wilt u dit programma gebruiken? ja/nee: ") == "Ja": 
    ww = input("Voer uw wachtwoord in: ") 
    if len(ww) < 6: 
     print ("uw wachtwoord is te kort, uw wachtwoord moet uit minimaal 6 en maximaal 12 karakters bestaan!") 
    elif len(ww) > 12: 
     print ("uw wachtwoord is te lang, uw wachtwoord moet uit minimaal 6 en maximaal 12 karakters bestaan!") 
    elif len(ww) >= 6 and len(ww)<= 12: 
     sww = set(ww)   # set is een onorganiseerde verzameling dat betekent dat het niet op order is bijv. SaUj%2F3 = Oonorganiseerd   
     if all(ok(sww,l) for l in [klein,groot,nummers,symbolen]): 
      print ("uw wachtwoord is Zeer sterk") 
     elif all(ok(sww,l) for l in [klein,groot,nummers]): 
      print ("uw wachtwoord is Sterk") 
     elif all(ok(sww,l) for l in [klein,groot,symbolen]): 
      print ("uw wachtwoord is Sterk") 
     elif all(ok(sww,l) for l in [groot,nummers,symbolen]): 
      print ("uw wachtwoord is Sterk") 
     elif all(ok(sww,l) for l in [nummers,symbolen,klein]): 
      print ("uw wachtwoord is Sterk") 
     elif all(ok(sww,l) for l in [nummers,symbolen]): 
      print ("uw wachtwoord is Medium") 
     elif all(ok(sww,l) for l in [groot,nummers]): 
      print ("uw wachtwoord is Medium") 
     elif all(ok(sww,l) for l in [groot,symbolen]): 
      print ("uw wachtwoord is Medium") 
     elif all(ok(sww,l) for l in [klein,groot]): 
      print ("uw wachtwoord is Medium") 
     elif all(ok(sww,l) for l in [klein,nummers]): 
      print ("uw wachtwoord is Medium") 
     elif all(ok(sww,l) for l in [klein,symbolen]): 
      print ("uw wachtwoord is Medium") 
     elif all(ok(sww,l) for l in [klein]): 
      print ("uw wachtwoord is Zwak") 
     elif all(ok(sww,l) for l in [symbolen]): 
      print ("uw wachtwoord is Zwak") 
     elif all(ok(sww,l) for l in [nummers]): 
      print ("uw wachtwoord is Zwak") 
     elif all(ok(sww,l) for l in [groot]): 
      print ("uw wachtwoord is Zwak") 

回答

0

這是因爲你要求它三次。當第一個條件(== "ja")錯誤時,它會進入下一個條件(== "JA")。在你的情況下,它會再次問你的意見。試着用a while true loop做:

while True: 
    inp = raw_input("Wilt u dit programma gebruiken? ja/nee: ") 
    if inp == "nee": 
     break 
+0

我不認爲'raw_input()'將在python 3.x中工作 –

0

我會做這種方式,檢查.lower()捕捉 「JA」, 「JA」 和 「JA」:

此外,使用getpass.getpass()代替input()爲實際的密碼可以防止「屏幕上出現本地回顯」......所以在使用這個功能時,沒有人能夠看到你的肩膀。

import time 
import sys 
import getpass 

KLEIN = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] 
GROOT = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'] 
NUMMERS = ['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'] 
SYMBOLEN = [' ', '!', '#', '$', '%', '&', '"', '(', ')', '*', '+', ',', '-', '.', '/', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', '{', '|', '}', '~',"'"] 


def printinstruction(): 
    print("Check of uw wachtwoord veilig genoeg is in dit programma.") 
    time.sleep(1) 
    print("Uw wachtwoord moet tussen minimaal 6 en maximaal 12 karakters bestaan") 
    print("U kunt gebruik maken van hoofdletters,getallen en SYMBOLEN (@,#,$,%)") 

def ok(passwd, l): 
    return any(k in passwd for k in l) # checkt of een letter in de lijst in het wachtwoord zit. 

def checkww(ww): 
    if len(ww) < 6: 
     print ("uw wachtwoord is te kort, uw wachtwoord moet uit minimaal 6 en maximaal 12 karakters bestaan!") 
    elif len(ww) > 12: 
     print ("uw wachtwoord is te lang, uw wachtwoord moet uit minimaal 6 en maximaal 12 karakters bestaan!") 
    elif len(ww) >= 6 and len(ww) <= 12: 
     sww = set(ww)   # set is een onorganiseerde verzameling dat betekent dat het niet op order is bijv. SaUj%2F3 = Oonorganiseerd   
     if all(ok(sww, l) for l in [KLEIN, GROOT, NUMMERS, SYMBOLEN]): 
      print("uw wachtwoord is Zeer sterk") 
     elif all(ok(sww, l) for l in [KLEIN, GROOT, NUMMERS]): 
      print("uw wachtwoord is Sterk") 
     elif all(ok(sww, l) for l in [KLEIN, GROOT, SYMBOLEN]): 
      print("uw wachtwoord is Sterk") 
     elif all(ok(sww, l) for l in [GROOT, NUMMERS, SYMBOLEN]): 
      print("uw wachtwoord is Sterk") 
     elif all(ok(sww, l) for l in [NUMMERS, SYMBOLEN, KLEIN]): 
      print("uw wachtwoord is Sterk") 
     elif all(ok(sww, l) for l in [NUMMERS, SYMBOLEN]): 
      print("uw wachtwoord is Medium") 
     elif all(ok(sww, l) for l in [GROOT, NUMMERS]): 
      print("uw wachtwoord is Medium") 
     elif all(ok(sww, l) for l in [GROOT, SYMBOLEN]): 
      print("uw wachtwoord is Medium") 
     elif all(ok(sww, l) for l in [KLEIN ,GROOT]): 
      print("uw wachtwoord is Medium") 
     elif all(ok(sww, l) for l in [KLEIN, NUMMERS]): 
      print("uw wachtwoord is Medium") 
     elif all(ok(sww, l) for l in [KLEIN, SYMBOLEN]): 
      print("uw wachtwoord is Medium") 
     elif all(ok(sww, l) for l in [KLEIN]): 
      print("uw wachtwoord is Zwak") 
     elif all(ok(sww, l) for l in [SYMBOLEN]): 
      print("uw wachtwoord is Zwak") 
     elif all(ok(sww, l) for l in [NUMMERS]): 
      print("uw wachtwoord is Zwak") 
     elif all(ok(sww, l) for l in [GROOT]): 
      print("uw wachtwoord is Zwak") 

def main(): 
    printinstruction() 
    while True: 
     gebruik = input("Wilt u dit programma gebruiken? ja/nee: ") 
     if gebruik.lower() == 'ja': 
      ww = getpass.getpass("Voer uw wachtwoord in: ") 
      checkww(ww) 
     if gebruik.lower() == 'nee': 
      break 

if __name__ == '__main__': 
    main() 

checkww()功能將是相當大的和重複的,這可以縮短,通過引入一個全球性的應答詞典,和計數「因素」,以確定正確的響應。

在你的代碼的頂部(與其他全局變量),你可以把字典:

RESPONSE = {1: "uw wachtwoord is Zwak", 2: "uw wachtwoord is Medium", 3: "uw wachtwoord is Sterk", 4: "uw wachtwoord is Zeer sterk"} 

,然後更換checkww()與此:

def checkww(ww): 
    factor = 0 
    if len(ww) < 6: 
     print ("uw wachtwoord is te kort, uw wachtwoord moet uit minimaal 6 en maximaal 12 karakters bestaan!") 
     return 
    elif len(ww) > 12: 
     print ("uw wachtwoord is te lang, uw wachtwoord moet uit minimaal 6 en maximaal 12 karakters bestaan!") 
     return  
    sww = set(ww) 
    if all(ok(sww, l) for l in [KLEIN]): factor += 1 
    if all(ok(sww, l) for l in [GROOT]): factor += 1 
    if all(ok(sww, l) for l in [NUMMERS]): factor += 1 
    if all(ok(sww, l) for l in [SYMBOLEN]): factor += 1 
    print(RESPONSE.get(factor, "Ooops - something went wrong")) 

HTH,埃德溫。