首先发布堆栈溢出:D 首先,在学校目前我正在研究一个小门进入系统和大多数代码(最短只有30行)是在学校的电脑 - 但我刚刚下载Anaconda因为我不能让python下载和即时通讯使用Spyder , 我试图解决一个小错误即时通讯,所以我可以在学校修复它,几乎我想让用户输入一个代码,将存储到'代码'变量,然后如果'代码'在“数据库”变量门将打开,如果不是它会告诉你访问被拒绝并循环程序为下一个人/下一次尝试 - 我在这里发布的是我的程序的最低限度,但它几乎是部分我正在努力 - 我已经让程序多次运行,代码单独出现但我正在寻找将它们变成列表而不是为了更容易使用 - 而且它已经设置了挑战
while True:
code = input ('Please enter your user ID ')
database = ['001','002','003']
if code == database:
print ('access granted')
else:
print ('Acess denied')
到目前为止我的代码:D
答案 0 :(得分:2)
您希望in
不是==
:
database = ['001','002','003'] # create once
while True:
code = input('Please enter your user ID ')
if code in database:
print ('access granted')
break # break if code is in our list
print ('Access denied') # or print access denied and ask again
您目前正在将列表与字符串进行比较,如if "001" == ['001','002','003']
等.. in
对的测试,因为我的列表中包含此元素。
关于小型数据集的另一个注意事项是无关紧要的,但使用membership查找较大尺寸的数据集是一种非常set方式来测试成员资格:
database = {'001','002','003'} # set literal
如果你不想打破一个没有验证的话,请忘记一下,然后只询问用户一次:
def get_access(db):
code = input('Please enter your user ID ')
if code in db:
print('access granted')
return True
print('Access denied') # or print access denied and ask again
return False
然后使用该功能:
database = {'001','002','003'}
granted = get_access(db)
if granted:
.............
如果你想要无限循环,你需要其他:
while True:
code = input('Please enter your user ID '):
if code in db:
print('access granted')
else:
print('Access denied')
答案 1 :(得分:1)
这是我的版本: -
database = ('001', '002', '003')
while input('Please enter your user ID ') not in database:
print ('Acess denied')
print ('access granted')
正如另一个答案所说,你需要测试输入是否在数据库列表中(或不在数据库列表中)。