【问题标题】:If statement containing len() expression not executing [closed]如果包含 len() 表达式的语句未执行 [关闭]
【发布时间】:2022-12-16 02:42:02
【问题描述】:

编辑:这个问题是由错误的 python/IDE 安装引起的。重新安装 IDE 后代码工作正常。

我正在尝试创建一个简单的程序,提示输入密码两次,如果输入正确两次,则会输出一条消息,提示“密码已设置”。问题是它跳过了我的第一个 if 语句,声明它必须在 8-12 个字符内才能有效。任何关于为什么这不起作用的信息将不胜感激。

pswrd = input('Please choose a password: ')
if len(pswrd) < 8 or len(pswrd) > 12:
    print('The password you have chosen is invalid. Please create a password between 8-12 characters.')
else:
    pswrd2 = input('Please retype your new password for confirmation: ')
if pswrd2 == pswrd:
        print('Thank you. Your password has been set.')
else:
    print('Your two entries do not match. Please try again.')

输出是这样的;

Please choose a password: seven
Please retype your new password for confirmation: seven
Thank you. Your password has been set.

Process finished with exit code 0

如您所见,它无法识别少于 8 个字符的密码。为什么是这样?

【问题讨论】:

  • 对我来说很好用。 PS:你应该使用 getpass.getpass() 在 Python 中输入密码,它更安全并且在输入时隐藏在终端上的密码。
  • 作为旁注,如果原始密码的长度不合适,此代码将在第二个if 语句上引发错误,因为pswrd2 将是一个未定义的变量。
  • 该代码似乎也适合我。根据@MarcoBonelli,您应该使用getpass.getpass()....
  • @MarcoBonelli 感谢您的建议。这仅适用于大学项目,因此只需要基础知识
  • 这段代码不可能产生输入为“七”的输出。您必须运行不同的代码。

标签: python if-statement


【解决方案1】:

有两件事需要包括在内:

  • 一个while循环使第一个密码有效
  • 将第二个密码放入不同的变量中进行比较。

这可能是代码的更好版本:

import getpass

proceed = False
while proceed == False:
    x = getpass.getpass(prompt='Password: ')
    if len(x) < 8 or len(x) > 12:
        print('password needs to be >8 < 12 characters')
    else:
        proceed = True

y = getpass.getpass(prompt='Password check: ')


if x == y:
    print('this is good')
else:
    print('passwords do not match')

【讨论】:

  • @tdelaney。更新为4个空格。 (当需要嵌套时,我倾向于使用更少)。
  • 这很有帮助,非常感谢!你知道为什么它在我的代码中不起作用吗?编码对我来说是新的,所以任何建议表示赞赏
  • 您好,我刚刚运行了您的代码,它运行良好,但它仍然允许输入密码,即使它不在 8-12 个字符之间。我不明白如何防止这种情况。
  • @slugcat,怎么样?您可以通过在 if 语句中添加 print('length is:', len(x)) 来真正测试它......
  • 您好,我已经在另一个 IDE 中运行了我的代码并且运行良好。我不明白我的 PyCharm 发生了什么事,但它根本就坏了。这似乎是问题所在。谢谢您的帮助。
猜你喜欢
  • 2014-09-23
  • 1970-01-01
  • 2022-12-05
  • 2019-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-23
  • 1970-01-01
相关资源
最近更新 更多