【问题标题】:Why isn't my code exiting the infinite loop? (python) [duplicate]为什么我的代码没有退出无限循环? (蟒蛇)[重复]
【发布时间】:2021-09-01 18:30:38
【问题描述】:

我对 Python 很陌生。我正在创建一个程序来开始做一些我认为会是革命性的大事情。然而,当我保存我的代码并对其进行测试时,即使在我输入了与条件不匹配的内容之后,它仍然处于我创建的无限循环中!我能得到一些帮助吗?

代码:

*...snip...* print("You may now choose a password. Your password must: \n"
      + "-be at least 8 characters \n"
      + "-NOT be 'password' \n"
      + "-NOT be an ordered list of numbers \n")
print("What is your password?")
password = input()
if password == "password" or "Password" or "PASSWORD" or "12345678":
    while password == "password" or "Password" or "PASSWORD" or "12345678":
        print("That password is too weak. Choose another password.")
        password = input()
else: *...snip...*

【问题讨论】:

  • 您需要像if password == "password" or password == "Password" or password == "PASSWORD" or password == "12345678": 或更简洁的if password.lower() in ("password", "12345678"): 那样做。因为所有后面的条件总是评估为 True ,所以你的循环继续进行。这是初学者常见的错误。
  • 您好,问题是当您检查password == "password" 是否正常但您必须重写password == 时,现在它只是尝试评估短语or "Password" 不是True 所以它一直在循环。为了创建更好看的代码,您可以使用:password in ["password", "Password", "PASSWORD", "12345678"]

标签: python infinite-loop


【解决方案1】:

你必须写

if password == "password" or password == "Password" or password == "PASSWORD" or password == "12345678":

您的 if 会像这样评估您的语句:如果密码等于字符串“密码”或者字符串“密码”是否不同于 null 等等。

【讨论】:

  • 测试更简单if password in ('password', 'Password', 'PASSWORD', '12345678'):;不涉及一遍又一遍地重复or password ==(也更快,因为要测试的值都是文字;CPython 至少会构建和缓存tuple,所以所涉及的工作只是加载常量tuple 并询问它会进行遏制测试,这将在内部短路,就像ors 的链一样)。
  • 说得对,感谢观察
  • 如果 password.lower() == "password" 或 password == "12345678" 我会这样做。这样无论大写什么字母都不能是密码。
  • @PeterJones:等等,你是在告诉我"pASsWorD" 是一个不安全的密码?!? 赶紧更改我所有的密码 :-) 我仍然会在那里使用in,只是为了避免输入太多password,例如if password.lower() in ("password", "12345678"):,但是是的,我同意从逻辑上讲,“密码”上的任何大小写组合都应被视为不安全而被拒绝。
  • @ShadowRanger 这很好。 In会更好,我越看越喜欢元组Idea。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-08
  • 2012-11-03
  • 2016-04-08
  • 1970-01-01
  • 2013-10-30
  • 2012-04-19
  • 1970-01-01
相关资源
最近更新 更多