我是python和编程新手,在摆弄一个简单的while循环时遇到了这个问题。循环接受输入来计算两个可能的密码:
print('Enter password')
passEntry = input()
while passEntry !='juice' or 'juice2':
print('Access Denied')
passEntry = input()
print(passEntry)
print('Access Granted')
它似乎不接受juice或juice2是有效的。
也只接受一个密码,如:
while passEntry != 'juice' :
将不工作,而:
while passEntry !='juice' :
工作好。我似乎找不到这些问题的原因(后两者之间的唯一区别是=后的空间)。
首先,您应该使用Python的getpass模块来获取可移植的密码。例如:
import getpass
passEntry = getpass.getpass("Enter password")
然后,您编写的用于保护while
循环的代码:
while passEntry != 'juice' or 'juice2':
被Python解释器解释为带有保护表达式
的while循环。(passEntry != 'juice') or 'juice2'
这总是为真,因为无论passEntry
是否等于"juice", "juice2"在解释为布尔值时将被视为真。
在Python中,测试成员关系的最佳方法是使用in
操作符,该操作符适用于各种数据类型,如列表、集合或元组。例如,列表:
while passEntry not in ['juice', 'juice2']:
可以使用
while passEntry not in ['juice' ,'juice2']:
如何:
while passEntry !='juice' and passEntry!= 'juice2':
和使用raw_input()
代替input()
?
input()
将输入当作Python代码计算。
passEntry !='juice' or 'juice2'
表示(pass != 'juice') or ('juice2')
。"juice2"
是非空字符串,所以它总是为真。因此,你的条件总是为真。
你想做passEntry != 'juice' and passEntry != 'juice2'
,或者更漂亮的passEntry not in ('juice', 'juice2')
。
这样行吗?
while passEntry !='juice' and passEntry !='juice2':
你的错误在于你写while语句的方式。
while passEntry !='juice' or 'juice2':
当python解释器读取该行时,该行将始终为真。而不是:
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')