Python:键盘输入和循环

时间:2018-12-03 22:37:10

标签: python loops raspberry-pi

我正在尝试用Raspberry Pi构建一个储物柜。我有一个密码,当使用USB键盘输入正确的CODE ='1234'时,它将打开一个伺服器。 基本上可以使用,但是需要以某种方式进行循环,如果输入了错误的PIN码,则会再次要求我输入正确的密码。

for event in dev.read_loop():
    if event.type == ecodes.EV_KEY:
        e = categorize(event)
        if e.keystate == e.key_down:
            klawisz = e.keycode[4:]
            if klawisz != "ESC":
                kod = (kod + klawisz)
                print(kod)
            else:
                break

if kod == '1234':
    for event in dev.read_loop():
        if event.type == ecodes.EV_KEY:
            d = categorize(event)
            if d.keystate == d.key_down:
                klawisz = d.keycode[4:]
                if klawisz == "ESC":
                    print('ITS OPEN')
                    break
                else:
                    break
else:
     print('Wrong PIN')

我在一开始尝试了while循环,但是它不起作用:(

while kod == '1234'

希望您能指导我正确的解决方案,因为我仍在学习Python。谢谢。

2 个答案:

答案 0 :(得分:1)

使用无限while循环,仅在代码匹配时才中断循环。

while True:
    code = input('Enter code: ')
    if code == '1234':
        print('Code accepted.')
        break
    print('Wrong code, try again.')

您可以轻松添加其他安全功能,以减少每次尝试的次数。

import time
attempts = 0
while True:
    code = input('Enter code: ')
    if code == '1234':
        print('Code accepted.')
        break
    print('Wrong code, try again.')
    attempts = attempts + 1
    if attempts > 9:
        print('Too many failed attempts. Please wait.')
        time.sleep(600)
        attempts = 0

您可以在常规计算机上运行上述所有示例以对其进行测试。他们使用Python的内置input函数。您可以使用RETURN键而不是代码中的ESC键来完成输入。您说过,您是使用USB键盘读取用户输入的,因此input甚至也可以与Raspberry Pi一起使用。

答案 1 :(得分:1)

如果某些情况仍然成立,则可以使用while循环重复执行某些操作(在示例中读取用户密码):

def read_password():
    kod = ""
    for event in dev.read_loop():
        if event.type == ecodes.EV_KEY:
            e = categorize(event)
            if e.keystate == e.key_down:
                klawisz = e.keycode[4:]
                if klawisz != "ESC":
                    kod = (kod + klawisz)
                    print(kod)
                else:
                    break
    return kod

while read_password() != '1234':
    print('Wrong PIN, try again')

在这种情况下,只要密码不匹配“ 1234”,您就在读取密码。