【问题标题】:Why does my for loop not check every character?为什么我的 for 循环不检查每个字符?
【发布时间】:2018-03-19 09:15:34
【问题描述】:

所以我是 python 的初学者,我一生都无法弄清楚为什么它不会检查并添加每个字母

def howstrong (password):
    points = len(password)
    charactersallowed = ["!", "$", "%", "^", "&", "*", "(", ")", "-", "_", "=", "+"]

    for ch in password:
        if ch.isupper():
            points= points+5
        elif ch.islower():
            points = points+5
        elif ch.isdigit():
            points = points+5
        elif ch in charactersallowed:
            points= points+5
        else:
            points = points+0
        return points

如果我输入密码Password!在我的代码中,它告诉我我的积分是 14,但对于这个密码,它应该是 24?下面我将添加我的其余代码,但我怀疑它在那部分,我相信我的 for 循环中的某个地方有错误。

def checkingmain():

    while 1:
        p = input("\nEnter password: ")
        if len(p) < 8 or len(p) > 24:
            print("Password must be 6 to 12 characters.")
        elif input("Re-enter password: ") != p:
            print("Passwords did not match. Please try again.")

        else:
            score= howstrong(p)
            if not score:
                print("Invalid character detected. Please try again.")

            else:
                if score <= 0:
                    print("your password is weak",score)
                elif score>0 and score<20:
                    print("your password is medium",score)
                else:
                    print("your password is strong",score)
            break

如果有人能回复我,为有点 Python 的初学者提供一个可以理解的解决方案,我将不胜感激。

【问题讨论】:

    标签: python for-loop password-checker


    【解决方案1】:

    由于你的 return 语句在循环中,它只会在从函数返回之前运行循环一次。如果您将退货声明移回一个选项卡,它应该可以工作

    【讨论】:

      【解决方案2】:

      return 语句位于 for 循环中,因此当您的程序第一次到达 for 循环的末尾时,它只是从函数中返回,因此您的 for 循环终止。如下所示对您的代码稍作改动会有所帮助。

      for ch in password:
          if ch.isupper():
              points= points+5
          elif ch.islower():
              points = points+5
          elif ch.isdigit():
              points = points+5
          elif ch in charactersallowed:
              points= points+5
          else:
              points = points+0
      return points
      

      希望对你有帮助!

      【讨论】:

        【解决方案3】:

        它只检查第一个字符,因为你在循环内返回。将您的 return 语句移回一个缩进,因此它不在 for 循环内。

        【讨论】:

        • 您知道如何阻止代码为每个大写字母添加 +5 吗?这是我现在遇到的一个新问题。如果你不知道应该没问题。我不想再麻烦你了:)也谢谢你的快速回复:))
        • 你需要一个标志变量。在循环之前设置has_capital = False,在加5之前检查它是否仍然是False并设置为True。
        猜你喜欢
        • 1970-01-01
        • 2018-10-11
        • 2019-08-20
        • 1970-01-01
        • 1970-01-01
        • 2023-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多