首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >while循环中的!=语句返回True,即使它不应该- Python

while循环中的!=语句返回True,即使它不应该- Python
EN

Stack Overflow用户
提问于 2022-02-26 04:19:36
回答 4查看 58关注 0票数 0

在密码函数中,我试图让用户输入一个密码,如果他/她输入了错误的密码,那么给他们另一个机会来写正确的密码,或者干脆退出。我面临的问题是,如果我输入错误的密码,然后如果我再次使用尝试,那么即使我写正确的密码(即1234),它仍然说不正确的密码!

为了检查出了什么问题,我使用print(answer, type(answer))print(passwd, type(passwd))来查看它们实际上是否完全相同(顺便说一句)。我还使用print(answer != passwd)来查看这是否是造成问题的原因之一。即使在应答和passwd相等之后,它仍然返回True。请建议我该怎么做。

代码语言:javascript
复制
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()
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-02-26 04:39:56

代码语言:javascript
复制
        password()

这个并不意味着“回到函数的开始”。它的意思是“再次调用函数,作为一个全新的操作;让它使用自己完全独立的一组局部变量;找出返回的内容;然后在返回后从这里继续”。

换句话说,如果调用任何其他函数,它的意思是完全相同的。

当新函数调用发生时,它再次提示输入input,并提供匹配的输入。这意味着while循环不运行,函数的结尾即为该调用。

然后返回到旧函数调用中的位置(就像调用了任何其他函数一样),对本地answer没有任何影响。所以现在answer != passwd是因为以前的answer != passwd,两种值都没有改变。passwd是全局的,但是answer是本地的-并且本地值是的本地值--函数的调用。

您应该重新思考您的逻辑,绘制一个流程图,然后在不进行递归调用的情况下重写它。确保您了解breakcontinue是如何工作的,因为您可能会发现它们很有用。

票数 1
EN

Stack Overflow用户

发布于 2022-02-26 04:50:22

就个人而言,您的主要问题是使用while循环的顺序。我通过编辑代码和更改with循环的顺序以及其他一些方法,设法解决了password函数的问题:

代码语言:javascript
复制
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

示例输出

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2022-02-26 05:09:40

代码语言:javascript
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71274050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档