在密码函数中,我试图让用户输入一个密码,如果他/她输入了错误的密码,那么给他们另一个机会来写正确的密码,或者干脆退出。我面临的问题是,如果我输入错误的密码,然后如果我再次使用尝试,那么即使我写正确的密码(即1234),它仍然说不正确的密码!
为了检查出了什么问题,我使用print(answer, type(answer))和print(passwd, type(passwd))来查看它们实际上是否完全相同(顺便说一句)。我还使用print(answer != passwd)来查看这是否是造成问题的原因之一。即使在应答和passwd相等之后,它仍然返回True。请建议我该怎么做。
passwd = '1234'
def password():
global passwd
answer = input("ENTER THE PASSWORD:\t")
print(answer, type(answer))
print(passwd, type(passwd))
while answer != passwd:
print(answer != passwd)
print('INCORRECT PASSWORD!')
print("1. TRY AGAIN.\n2. QUIT")
ans = input("Answer(1/2):\t")
while ans not in ['1', '2']:
print("Incorrect input.")
ans = input("Answer(1/2):\t")
if ans == '1':
password()
elif ans == '2':
print("Bye!")
quit()发布于 2022-02-26 04:39:56
password()这个并不意味着“回到函数的开始”。它的意思是“再次调用函数,作为一个全新的操作;让它使用自己完全独立的一组局部变量;找出返回的内容;然后在返回后从这里继续”。
换句话说,如果调用任何其他函数,它的意思是完全相同的。
当新函数调用发生时,它再次提示输入input,并提供匹配的输入。这意味着while循环不运行,函数的结尾即为该调用。
然后返回到旧函数调用中的位置(就像调用了任何其他函数一样),对本地answer没有任何影响。所以现在answer != passwd是因为以前的answer != passwd,两种值都没有改变。passwd是全局的,但是answer是本地的-并且本地值是的本地值--函数的调用。
您应该重新思考您的逻辑,绘制一个流程图,然后在不进行递归调用的情况下重写它。确保您了解break和continue是如何工作的,因为您可能会发现它们很有用。
发布于 2022-02-26 04:50:22
就个人而言,您的主要问题是使用while循环的顺序。我通过编辑代码和更改with循环的顺序以及其他一些方法,设法解决了password函数的问题:
passwd = '1234'
def password():
global passwd
while True:
answer = input("ENTER THE PASSWORD:\t")
if answer != passwd:
wrongAnswer = input("1. TRY AGAIN.\n2. QUIT\nAnswer(1/2):\t")
while wrongAnswer != "1" and wrongAnswer != "2":
print("Incorrect input.")
wrongAnswer = input("Answer(1/2):\t")
if wrongAnswer == "2":
print("Bye!")
break
else:
print("Password is correct! Goodby")
break示例输出
ENTER THE PASSWORD: 8765
1. TRY AGAIN.
2. QUIT
Answer(1/2): 1
ENTER THE PASSWORD: 8765
1. TRY AGAIN.
2. QUIT
Answer(1/2): 1
ENTER THE PASSWORD: 1234
Password is correct! Goodby发布于 2022-02-26 05:09:40
passwd = '1234'
# I added answer = None for the first function call
answer = None
def password():
global passwd
# The global answer ensures I use whatever the latest value of answer is(defined by the return statement at teh end of function)
global answer
answer = input("ENTER THE PASSWORD:\t")
print(answer, type(answer))
print(passwd, type(passwd))
while answer != passwd:
print(answer != passwd)
print('INCORRECT PASSWORD!')
print("1. TRY AGAIN.\n2. QUIT")
ans = input("Answer(1/2):\t")
while ans not in ['1', '2']:
print("Incorrect input.")
ans = input("Answer(1/2):\t")
if ans == '1':
password()
elif ans == '2':
print("Bye!")
quit()
# This would return the answer and change the global variable
return answer
password()https://stackoverflow.com/questions/71274050
复制相似问题