我是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' :
工作正常。我似乎无法找到这些问题的原因(后两者之间的区别是=之后的空格)。任何帮助表示赞赏。
答案 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')