如何确保我只打印一次?

问题描述:

我是一个初学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

for item in wachtwoord:您遍历字符串,它似乎在每个字符是无意的。它看起来不像是在for循环中的任何地方使用item,所以它只是对每个字符以相同的方式重复该过程。尝试删除该行

+0

@ X.Feliers乐于帮助,欢迎来到Stack Overflow。如果此答案或任何其他人解决了您的问题,请将其标记为已接受。 – EthanBar

您打印字符的密码。删除该循环。 re搜索会遍历整个密码,因此您不需要遍历字符。最大的线索是,你从不在循环中使用项目 - 所以你并没有真的在迭代字符串。


一个有用的调试提示:使你的打印语句唯一的,所以你可以告诉为什么你没有在每次迭代。

正如其他用户提到的那样,删除外部循环是解决这个问题的第一步。一旦你做完这些,还有另一种改进,你可以这样做你不保持复制这些print声明:

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

注意lengtebool变量,所以它比较None将始终返回False(不是你想要的)。