声明ja / nee

时间:2016-09-29 09:24:55

标签: python-3.x while-loop passwords

当用户插入“nee”&时,如何让我的while语句停止?退出程序。当用户插入nee时,它继续运行程序并询问(“Wilt u dit program gebruiken?ja / nee:”)3次。在它问了我3次后,程序突然停止了。

我希望程序在用户插入ja时运行,并在用户插入nee时停止。

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")

2 个答案:

答案 0 :(得分:0)

这是因为你要求它三次。当第一个条件(== "ja")出错时,它会继续下一个条件(== "JA")。在您的情况下,它会再次询问您的输入。尝试使用a while true loop

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

答案 1 :(得分: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字典并计算“因子”来确定正确的响应来缩短。

在代码的顶部(与其他全局变量相同),您可以输入字典:

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,Edwin。