我是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 :(得分:1)
在error: `prefix' undefined near line 12 column 35
error: evaluating argument list element number 2
error: called from:
error: C:\Octave\Octave3.4.3_gcc4.5.2\share\octave\site\m\startup/octaverc at line 12, column 1
octave:1>
,你正在迭代字符串中的每个字符,这似乎是无意的。它看起来好像你在for循环中的任何地方使用if(play == 'N' or play == 'n'):
is_user_turn = False
return turn_total
else:
is_user_turn == True
,所以它只是以相同的方式为每个字符重复该过程。尝试删除该行
答案 1 :(得分:0)
您在密码中打印每个字符。删除该循环。 重新搜索会查看整个密码,因此您无需遍历这些字符。最大的线索是你永远不会在循环中使用 item - 所以你并没有真正遍历字符串。
一个有用的调试提示:使您的打印语句独一无二,这样您就可以告诉为什么您在每次迭代时都失败了。
答案 2 :(得分:0)
正如其他用户所提到的,删除外部循环是解决此问题的第一步。完成后,您可以进行另一项改进,这样就不会复制那些print
语句:
flag = None not in {kleine_letter, hoofd_letter, cijfer, karakter} and lengte
print("{0} -> Geldig paswoord? {}".format(wachtwoord, flag))
请注意,lengte
是bool
变量,因此将其与None
进行比较将始终返回False
(不是您想要的)。