如何确保我只打印一次?
问题描述:
我是一个初学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
答
在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))
注意lengte
是bool
变量,所以它比较None
将始终返回False
(不是你想要的)。
为什么你有for循环'wachtwoord'项目?您不要在代码的其余部分使用项目。 – jh1711