0

我是python和一般编程的新手,我在摆弄一个简单的while循环时遇到了这个问题。该循环接受输入来评估两个可能的密码:

    print('Enter password')
    passEntry = input()

    while passEntry !='juice' or 'juice2':
      print('Access Denied')
      passEntry = input()
      print(passEntry)

    print('Access Granted')

它似乎不接受果汁或果汁2 为有效。

也只接受一个密码,例如:

    while passEntry != 'juice' :

将不起作用,同时:

    while passEntry !='juice' :

工作正常。我似乎找不到这些问题的原因(后两者之间的唯一区别是 = 后面的空格)。任何帮助表示赞赏。

4

6 回答 6

7

首先,您应该使用 Python 的getpass模块来便携地获取密码。例如:

import getpass
passEntry = getpass.getpass("Enter password")

然后,您编写的用于保护while循环的代码:

while passEntry != 'juice' or 'juice2':

被 Python 解释器解释为带有保护表达式的 while 循环

(passEntry != 'juice') or 'juice2'

这总是正确的,因为无论是否passEntry等于“juice”,“juice2”在解释为布尔值时都将被视为 true。

在 Python 中,测试成员资格的最佳方法是使用inoperator,它适用于各种数据类型,例如列表、集合或元组。例如,一个列表:

while passEntry not in ['juice', 'juice2']:
于 2012-12-28T05:53:52.497 回答
3

您可以使用

while passEntry not in ['juice' ,'juice2']:
于 2012-12-28T05:49:19.773 回答
1

怎么样:

while passEntry !='juice' and passEntry!= 'juice2':

并使用raw_input()而不是input()

input()评估输入,就好像它是 Python 代码一样。

于 2012-12-28T05:49:14.083 回答
1

passEntry !='juice' or 'juice2'意味着(pass != 'juice') or ('juice2')"juice2"是一个非空字符串,所以它总是正确的。因此,您的条件始终为真。

你想做的passEntry != 'juice' and passEntry != 'juice2',或者更好passEntry not in ('juice', 'juice2')

于 2012-12-28T05:49:46.340 回答
0

这行得通吗?

while passEntry !='juice' and passEntry !='juice2':
于 2012-12-28T05:47:22.497 回答
0

您的错误在于您编写 while 语句的方式。

while passEntry !='juice' or 'juice2':

当被 python 解释器读取时,该行将始终为真。而不是:

passEntry = input()

采用:

passEntry = raw_input()

(除非您使用的是 Python 3)

inputPython 2 中的 eval 评估您的输入。

这将是正确的代码:

print('Enter password')
passEntry = raw_input()

while passEntry != 'juice' and passEntry != 'juice2':
    print('Access Denied')
    passEntry = raw_input()
    print(passEntry)

print('Access Granted')
于 2012-12-28T09:53:31.643 回答