Python:小而循环错误

时间:2012-12-28 05:45:24

标签: python loops syntax conditional-statements

我是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' :

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

6 个答案:

答案 0 :(得分:7)

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

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

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

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

被Python解释器解释为带有保护表达式

的while循环
(passEntry != 'juice') or 'juice2'

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

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

while passEntry not in ['juice', 'juice2']:

答案 1 :(得分:3)

你可以使用

while passEntry not in ['juice' ,'juice2']:

答案 2 :(得分:1)

怎么样:

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

并使用raw_input()代替input()

input()将输入评估为Python代码。

答案 3 :(得分:1)

passEntry !='juice' or 'juice2'表示(pass != 'juice') or ('juice2')"juice2"是一个非空字符串,所以它总是如此。因此,你的情况总是如此。

您希望passEntry != 'juice' and passEntry != 'juice2'或更好passEntry not in ('juice', 'juice2')

答案 4 :(得分:0)

这有用吗?

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

答案 5 :(得分:0)

您的错误与编写while语句的方式有关。

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

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

passEntry = input()

使用:

passEntry = raw_input()

(除非您使用的是Python 3)

Python 2中的input会侵犯您的输入。

这将是正确的代码:

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

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

print('Access Granted')