2017-10-19 111 views
1

我是一個初學Python的人,我正在嘗試創建一個檢查密碼可變性的程序。如何確保我只打印一次?

代碼已完成,但是當我執行它時,它會多次打印相同的消息。但我只希望它打印一次。

def controleer_paswoord(wachtwoord): 
    import re 
    for item in wachtwoord: 
     kleine_letter = re.search("[a-z]",wachtwoord) 
     hoofd_letter = re.search("[A-Z]",wachtwoord) 
     cijfer = re.search ("[0-9]",wachtwoord) 
     karakter = re.search ("[$#@]",wachtwoord) 
     lengte = (len(wachtwoord)<6 or len(wachtwoord)>12) 
     if kleine_letter == None: 
      print("{0} -> Geldig paswoord? False".format(wachtwoord)) 
     elif hoofd_letter == None: 
      print("{0} -> Geldig paswoord? False".format(wachtwoord)) 
     elif cijfer == None: 
      print("{0} -> Geldig paswoord? False".format(wachtwoord)) 
     elif karakter == None: 
      print("{0} -> Geldig paswoord? False".format(wachtwoord)) 
     elif lengte == None: 
      print("{0} -> Geldig paswoord? False".format(wachtwoord)) 
     else: 
      print("{0} -> Geldig paswoord? True".format(wachtwoord)) 

# wachtwoord = (input("Geef hier uw gewenste wachtwoord in:")) 
wachtwoord = "2w3E" 
controleer_paswoord(wachtwoord) 

我得到什麼:

#2w3E -> Geldig paswoord? False 
#2w3E -> Geldig paswoord? False 
#2w3E -> Geldig paswoord? False 
#2w3E -> Geldig paswoord? False 

我想要的東西:

#2w3E -> Geldig paswoord? False 
+0

爲什麼你有for循環'wachtwoord'項目?您不要在代碼的其餘部分使用項目。 – jh1711

回答

1

for item in wachtwoord:您遍歷字符串,它似乎在每個字符是無意的。它看起來不像是在for循環中的任何地方使用item,所以它只是對每個字符以相同的方式重複該過程。嘗試刪除該行

+0

@ X.Feliers樂於幫助,歡迎來到Stack Overflow。如果此答案或任何其他人解決了您的問題,請將其標記爲已接受。 – EthanBar

0

您打印字符的密碼。刪除該循環。 re搜索會遍歷整個密碼,因此您不需要遍歷字符。最大的線索是,你從不在循環中使用項目 - 所以你並沒有真的在迭代字符串。


一個有用的調試提示:使你的打印語句唯一的,所以你可以告訴爲什麼你沒有在每次迭代。

0

正如其他用戶提到的那樣,刪除外部循環是解決這個問題的第一步。一旦你做完這些,還有另一種改進,你可以這樣做你不保持複製這些print聲明:

flag = None not in {kleine_letter, hoofd_letter, cijfer, karakter} and lengte 
print("{0} -> Geldig paswoord? {}".format(wachtwoord, flag)) 

注意lengtebool變量,所以它比較None將始終返回False(不是你想要的)。