【问题标题】:Python - Beginner Level - User input and while Loop combinationPython - 初级 - 用户输入和 while 循环组合
【发布时间】:2018-03-10 08:07:55
【问题描述】:

我对“Google”、“YouTube”、“Facebook”和“Stack Overflow”进行了一些研究,但没有找到我想要的东西。所以,我需要你的指导。 :)

我希望程序要求用户输入“密码”,每次用户输入错误的密码时,程序都会一次又一次地询问密码,直到用户 键入正确的密码。假设密码就像“abc123”一样简单。

所以,我启动程序并要求输入:“密码:”。如果用户键入“abc123”,则程序会打印“GOOD PASSWORD”。如果用户键入任何不是“abc123”的内容,则程序将打印“BAD PASSWORD”。就这么简单……暂时。

我的最佳尝试:

#SECTION1_ASKING
passwordInput=input('PASSWORD: ')
password='abc123'
while password == passwordInput:
    print('GOOD PASSWORD')
    break 
else:
    print('BAD PASSWORD')
    passwordInput=input('PASSWORD: ')

#SECTION2_RE-ASKING
while False:
    while password == paswordInput:
        print('GOOD PASSWORD')
    else:
        print('BAD PASSWORD')
        passwordInput=input('PASSWORD: ')

但我要么让密码询问一次或两次,要么陷入无限循环

【问题讨论】:

  • 你说两个答案都有效,但一个使用raw_input(),即 Python 2,一个使用input(),即 Python 3(input() 的 Python 2 版本有不同采用)。您使用的是哪个版本的 Python?
  • whilefor 是循环结构,您似乎将它们与if 混淆了,或者至少将它们混合在一起,因为它们都可以与else 结合使用。顺便说一句,一个建议:先用通俗易懂的语言写一个计划,这样即使没有任何编程知识,任何人都可以理解并遵循它。将此计划保存在代码的 cmets 中。
  • 我都试过了。我正在使用 Python 3.x。我知道“raw_input()”在 Python 3.x 中是“input()”,所以我在运行代码之前更改了该部分。
  • 请阅读How do I ask a good question?。您可以在调试器中观看小程序的执行,以了解哪里出了问题。有这方面的在线工具以及PythonTutor
  • 嗯,对于我作为初学者的理解,if 运行一次代码,while 一遍又一遍地运行代码,for 运行代码一定次数,else只运行代码而不是在ifwhilefor 代码上设置的条件。既然我有我的问题的答案,我将更深入地分析我的错误。我觉得我需要更多地练习这些(ifwhilefor)并在继续之前熟悉使用它们。

标签: python input while-loop


【解决方案1】:

试试这个:

passwordInput=raw_input('PASSWORD: ')
password='abc123'
while True:
    if password == passwordInput:
        print('GOOD PASSWORD')
        break 
    else:
        print('BAD PASSWORD')
        passwordInput=raw_input('PASSWORD: ')

【讨论】:

  • 欢迎您 :) @simeon9446 如果它解决了您的问题,请将其标记为答案
【解决方案2】:

您可以在几行中执行以下操作。

password='abc123'
while(True):
    passwordInput=input('PASSWORD: ')
    if(passwordInput==password):
        print("Good password")
        break
    else:
        print("Bad password")

【讨论】:

  • @simeon9446 你现在知道为什么你的代码不像你想要的那样吗?
  • 为什么要在条件周围加上括号?
  • @ifconfig 老实说,不是真的。就像我认为程序会做的事情和程序实际做的事情一样,方向相似但并不完全一致。谁的错-我的,因为我对程序给出了错误的指示。为什么?因为我缺乏知识和理解。我在 Python 中真的很“原始”(实际使用了几天) :) 现在我正在使用 PythonTutor 来分析错误并学习。
【解决方案3】:

这是我的解决方案:

password = 'abc123'

while True:

    passwordInput = input('PASSWORD: ')

    if password == passwordInput:
        print('GOOD PASSWORD')
        break
    else:
        print('BAD PASSWORD')

这与您的有何不同?首先,您可以看到我只有一个电话给input(),这通常是个好主意,因为您只需要在一个地方检查密码。请注意,我使用if 而不是while 进行测试。

在您的第二个示例中,您有while False:。这可能是真的吗?不,所以它不会被执行。

请注意,我使用了更多的空格。这不会减慢程序的速度,而是使其更易于阅读。另见PEP008

现在你已经开始工作了,只是为了好玩,考虑改进一下。通常,您不希望密码在输入时可见,但有一个模块:getpass - 它是标准库的一部分,因此您无需下载任何内容。

import getpass 添加到脚本的顶部。而不是input 使用getpass.getpass,在程序中的相同位置,具有相同的参数。现在它不会回显用户输入的密码了。

getpass是模块名,getpass也是函数名,所以getpass.getpass('PASSWORD: ')表示在getpass模块中执行getpass()函数。我们在 Python 中使用了很多模块,因此值得习惯使用它们。你可以找到文档here,注意还有一个getpass.getuser()可以玩。

【讨论】:

  • 哦..哇!这真是令人印象深刻。允许输入错误密码一定次数怎么样?这样做很复杂吗?
  • 不,这很简单。只需在开始时将计数变量初始化为零,然后在每次询问密码时将其递增 (count += 1)。然后,您需要额外检查 (if) 以查看是否超出限制。或多或少是一个 Python 101 练习。
  • 顺便说一句,下次你在这里问问题时,考虑一下你是否真的需要第一段。它不会增加任何东西,也不会使人们更愿意提供帮助。让人们提供帮助的原因是展示您自己尝试过的努力,您确实做到了。
猜你喜欢
  • 1970-01-01
  • 2015-10-21
  • 2013-11-16
  • 2020-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-07
  • 2014-01-03
相关资源
最近更新 更多