如何确保我只打印一次?

时间:2017-10-19 20:46:47

标签: python python-3.x printing

我是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

3 个答案:

答案 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))

请注意,lengtebool变量,因此将其与None进行比较将始终返回False(不是您想要的)。