例如,当按下“f”键时,函数将返回字符“f”,这样我就可以运行ord(键)并获得按下键的ascii值。我正在尝试制作一个模拟Enigma密码机的程序,希望在窗口对焦时直接从键盘输入,密码输出打印到控制台上。(在一个单独但相关的注释中,我很难记住如何让print()函数在输出后省略换行符)。在我看来,pynput键盘模块是实现这一点的工具,但我不太清楚如何使用它。 这是我目前为止的完整代码。“on_press”和“on_release”功能,以及“with Listener(…)”之后的所有功能都是从互联网上获取的(https://pythonhosted.org/pynput/keyboard.html),老实说,我不知道它们做什么或如何使用它们
from pynput.keyboard import Key, Listener
wheels = {fst:[19,-1 , 4 , -2, 11,-3 , 12,-4 , 8 ,-5 , 10,-6 , 9 , 0 , 11,-8 , 8 ,-9 , 5 ,-10, 2 ,-10,-5 ,-13,-10,-13],
med:[2 , 6 , 10, 5 , 0 , 15, 12,-6 , 13, 2 ,-10, 11,-3 ,-7 , 0 , 8 ,-13,-1 ,-5 ,-9 ,-15, 4 ,-3 ,-8 ,-7 ,-1 ],
slo:[16, 17, 19, 16,-3 ,-2 , 4 , 17, 6 , 0 ,-8 ,-3 , 13,-9 ,-7 ,-10,-16,-6 ,-5 ,-4 , 3 ,-4 ,-2 ,-1 ,-18,-13],
rfl:[8 , 22, 18, 4 , 1 ,-1 , 19,-4 ,-8 , 5 , 2 , 8 ,-2 , 3 ,-5 , 7 ,-3 , 1 ,-1 ,-8 ,-18, 3 ,-7 ,-22,-3 ,-19]}
dials = [0, 0, 0, 0]
def incr():
dials[0] = (dials[0] + 1) % 26
if(dials[0]==0):
dials[1] = (dials[1] + 1) % 26
if(dials[1]==0):
dials[2] = (dials[2] + 1) % 26
def shift(char,level):
return(chr(ord(char) - 97 + wheels[level][(ord(char) - 97 + dials[level]) % 26]))
def on_press(key):
print('{0} pressed'.format(key))
def on_release(key):
print('{0} release'.format(key))
if key == Key.esc:
return False
def route(char):
#process the character through each level of scrambling
incr()
with Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()
听众的一般精神是,他们会“听”你键盘上输入的任何键
在上面的代码中(取自网站),按下某个键时会调用
on_press
函数,这与释放键不同。此功能非常有用,因为我们可以尝试存储为以后使用而按下的信息(按键)(用于您的Enigma cypher机器)on_release
函数可以被认为是帮助确定侦听器是否应该停止监听键盘的函数。如果on_release
函数返回False,则侦听器结束为了你的项目,我对上面的代码做了一些简陋的修改,这将帮助你不再听键盘
从这一点开始,您必须将用户输入合并到您的机器的Enigma cypher方面。我应该提到我对你的代码做了一些小的修改。例如,侦听器应该能够理解空格
如果您有任何后续问题,请告诉我
相关问题 更多 >
编程相关推荐