小编典典

我的if-else语句是怎么回事?(Python 3.3)

python

我正在为计费程序项目编写条件语句。对于我认识的初学者来说有点先进,但是我欢迎挑战。无论如何,我计划通过询问用户名和密码来启动程序。因此,这是我对该程序的第一个编码。

print ("Hello and welcome to Billing Pro, please enter your username and password to access the database.")

username = input ("Enter username:")

if username == "cking" or "doneal" or "mcook":
  print ("Valid username.")
else:
  print ("Invalid username. Please try again.")


password = input ("Enter password:")

if password == "rammstein1" or "theory1" or "tupac1":
  print ("Valid password. User has been verified.")
else:
  print ("Invalid password. Access denied.")

现在,当我运行此代码时,如果我键入了用户名的三个选项之外的其他选项,Python会打印出“无效的用户名”行。现在由于某种原因,它会打印出“有效的用户名”,然后继续输入密码提示。另外,如果我输入了除密码选项以外的任何内容,它将始终读出“有效密码”提示。

另外,当用户输入三个选项之外的其他内容时,如何循环用户名提示?我应该使用while语句代替if-else还是可以在if-
else语句的末尾放置while语句以再次触发提示?

哦,我知道您说不清楚,因为问题中我的格式很糟糕,但是我确实在脚本本身上使用了适当的缩进。


阅读 248

收藏
2021-01-20

共1个答案

小编典典

布尔表达式本身的问题在于它们始终为True。

if a == 'b' or 'c'就像if (True|False) or 'c',并且由于'c'true,所以不管第一个表达式(a == 'b')都是True 。

您要么想要,a == 'b' and a == 'c'…要么更简洁a in {'b', 'c'…},它检查是否a是集合的成员。

如果要循环,请使用循环:)

while username not in {"cking", "doneal", "mcook"}:
    print ("Invalid username. Please try again.")
    username = input ("Enter username:")
print ("Valid username.")
2021-01-20