门禁系统 - 列表检查

时间:2015-11-20 22:18:02

标签: python

首先发布堆栈溢出: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

2 个答案:

答案 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']等.. inenter image description here的测试,因为我的列表中包含此元素。

关于小型数据集的另一个注意事项是无关紧要的,但使用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')

正如另一个答案所说,你需要测试输入是否在数据库列表中(或不在数据库列表中)。