2017-10-19 1 views
1

저는 파이썬 초보자입니다. 암호의 변동성을 검사하는 프로그램을 만들려고합니다.인쇄 방법을 한 번만 확인하는 방법은 무엇입니까?

코드가 완료되었지만 실행하면 동일한 메시지가 여러 번 인쇄됩니다. 하지만 한 번 인쇄하기를 원합니다.

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 

내가 원하는 : for item in wachtwoord:에서

#2w3E -> Geldig paswoord? False 
+0

왜 for 루프가'wachtwoord에있는 항목'에 있습니까? 나머지 코드에서는 항목을 사용하지 않습니다. – jh1711

답변

1

은 당신이 보이는 문자열의 각 문자 반복된다 의도하지 않아야한다. for 루프 내부에 item을 사용하는 것처럼 보이지 않으므로 각 문자에 대해 동일한 방식으로 프로세스가 반복됩니다. 해당 행을 제거해보십시오.

+0

@ X.Feliers 도와 주시겠습니까? 스택 오버플로에 오신 것을 환영합니다. 이 답변 또는 다른 사람이 문제를 해결 한 경우이를 수락 한 것으로 표시하십시오. – EthanBar

0

의 경우 문자로 인쇄하십시오. 루프를 제거하십시오. 검색은 전체 암호를 검색하므로 문자를 반복 할 필요가 없습니다. 큰 단서는 항목을 루프 내에서 사용하지 않는다는 것입니다. 따라서 문자열을 실제로 반복하지는 않습니다.


하나 도움이 디버깅 힌트 : 문 독특한 당신의 인쇄를하기 때문에 당신이 각 반복에 실패한 이유는 을 알 수 있습니다.

0

다른 사용자가 언급했듯이 바깥 쪽 루프를 제거하는 것이이 문제를 해결하는 첫 번째 단계입니다.

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

lengte 것을이 bool 변수, 그래서 None과 비교 항상 (False를 반환합니다 : 당신이 그와 함께 완료되면, 당신은 당신이 그 print 문을 복제 보관하지 않도록 할 수있는 또 다른 개선이있다 당신이 원하는 것이 아닙니다.)