我正在尝试用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。谢谢。
答案 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”,您就在读取密码。