改进 Python 代码

Improve Python Code

我不是一个好的编码员所以我希望你能帮助我解决这个问题。请看我的代码。我使用此代码将字符转换为发送到计算机的代码。此代码被解释为 HID 键盘代码。我有 2 个问题:

1) 执行代码时,"AAA"或“111”等双符号减为1?所以 "A" 和 "1" 而预览看起来还不错?

2) 我该如何改进这段代码,以便我也可以发送特殊的击键。现在每个字符都单独处理。字典规定制表符为 "TAB",删除键为 "DEL"。但是,如果所有内容都按字符匹配,则永远找不到整个单词,因此无法发送正确的代码。

希望你愿意帮助我改进这段代码。

谢谢!

#!/usr/bin/python

"""
HID Keyboard Mapper
Version: 1.0
By: Jarno Baselier
Date: 2018
URL: www.jarnobaselier.nl
"""

#Imports

#Program variables
LIST    = 1     #If LIST is 1 than complete keymap code is shown on screen
EXECUTE    = 1     #If EXECUTE is 1 than complete keymap code is send to the HID device and executed

#Variables
NULL_CHAR = chr(0)

#Functions
#Create write_report function to write HID codes to the HID Keyboard
def write_report(report):
    with open('/dev/hidg0', 'rb+') as fd:
        fd.write(report.encode())

#Dictionary
values = {
'a':'write_report(NULL_CHAR*2 +chr(4)+NULL_CHAR*5)',
'b':'write_report(NULL_CHAR*2 +chr(5)+NULL_CHAR*5)',
'c':'write_report(NULL_CHAR*2 +chr(6)+NULL_CHAR*5)',
'd':'write_report(NULL_CHAR*2 +chr(7)+NULL_CHAR*5)',
'e':'write_report(NULL_CHAR*2 +chr(8)+NULL_CHAR*5)',
'f':'write_report(NULL_CHAR*2 +chr(9)+NULL_CHAR*5)',
'g':'write_report(NULL_CHAR*2 +chr(10)+NULL_CHAR*5)',
'h':'write_report(NULL_CHAR*2 +chr(11)+NULL_CHAR*5)',
'i':'write_report(NULL_CHAR*2 +chr(12)+NULL_CHAR*5)',
'j':'write_report(NULL_CHAR*2 +chr(13)+NULL_CHAR*5)',
'k':'write_report(NULL_CHAR*2 +chr(14)+NULL_CHAR*5)',
'l':'write_report(NULL_CHAR*2 +chr(15)+NULL_CHAR*5)',
'm':'write_report(NULL_CHAR*2 +chr(16)+NULL_CHAR*5)',
'n':'write_report(NULL_CHAR*2 +chr(17)+NULL_CHAR*5)',
'o':'write_report(NULL_CHAR*2 +chr(18)+NULL_CHAR*5)',
'p':'write_report(NULL_CHAR*2 +chr(19)+NULL_CHAR*5)',
'q':'write_report(NULL_CHAR*2 +chr(20)+NULL_CHAR*5)',
'r':'write_report(NULL_CHAR*2 +chr(21)+NULL_CHAR*5)',
's':'write_report(NULL_CHAR*2 +chr(22)+NULL_CHAR*5)',
't':'write_report(NULL_CHAR*2 +chr(23)+NULL_CHAR*5)',
'u':'write_report(NULL_CHAR*2 +chr(24)+NULL_CHAR*5)',
'v':'write_report(NULL_CHAR*2 +chr(25)+NULL_CHAR*5)',
'w':'write_report(NULL_CHAR*2 +chr(26)+NULL_CHAR*5)',
'x':'write_report(NULL_CHAR*2 +chr(27)+NULL_CHAR*5)',
'y':'write_report(NULL_CHAR*2 +chr(28)+NULL_CHAR*5)',
'z':'write_report(NULL_CHAR*2 +chr(29)+NULL_CHAR*5)',
'A':'write_report(chr(2)+NULL_CHAR+chr(4)+NULL_CHAR*5)',
'B':'write_report(chr(2)+NULL_CHAR+chr(5)+NULL_CHAR*5)',
'C':'write_report(chr(2)+NULL_CHAR+chr(6)+NULL_CHAR*5)',
'D':'write_report(chr(2)+NULL_CHAR+chr(7)+NULL_CHAR*5)',
'E':'write_report(chr(2)+NULL_CHAR+chr(8)+NULL_CHAR*5)',
'F':'write_report(chr(2)+NULL_CHAR+chr(9)+NULL_CHAR*5)',
'G':'write_report(chr(2)+NULL_CHAR+chr(10)+NULL_CHAR*5)',
'H':'write_report(chr(2)+NULL_CHAR+chr(11)+NULL_CHAR*5)',
'I':'write_report(chr(2)+NULL_CHAR+chr(12)+NULL_CHAR*5)',
'J':'write_report(chr(2)+NULL_CHAR+chr(13)+NULL_CHAR*5)',
'K':'write_report(chr(2)+NULL_CHAR+chr(14)+NULL_CHAR*5)',
'L':'write_report(chr(2)+NULL_CHAR+chr(15)+NULL_CHAR*5)',
'M':'write_report(chr(2)+NULL_CHAR+chr(16)+NULL_CHAR*5)',
'N':'write_report(chr(2)+NULL_CHAR+chr(17)+NULL_CHAR*5)',
'O':'write_report(chr(2)+NULL_CHAR+chr(18)+NULL_CHAR*5)',
'P':'write_report(chr(2)+NULL_CHAR+chr(19)+NULL_CHAR*5)',
'Q':'write_report(chr(2)+NULL_CHAR+chr(20)+NULL_CHAR*5)',
'R':'write_report(chr(2)+NULL_CHAR+chr(21)+NULL_CHAR*5)',
'S':'write_report(chr(2)+NULL_CHAR+chr(22)+NULL_CHAR*5)',
'T':'write_report(chr(2)+NULL_CHAR+chr(23)+NULL_CHAR*5)',
'U':'write_report(chr(2)+NULL_CHAR+chr(24)+NULL_CHAR*5)',
'V':'write_report(chr(2)+NULL_CHAR+chr(25)+NULL_CHAR*5)',
'W':'write_report(chr(2)+NULL_CHAR+chr(26)+NULL_CHAR*5)',
'X':'write_report(chr(2)+NULL_CHAR+chr(27)+NULL_CHAR*5)',
'Y':'write_report(chr(2)+NULL_CHAR+chr(28)+NULL_CHAR*5)',
'Z':'write_report(chr(2)+NULL_CHAR+chr(29)+NULL_CHAR*5)',
'1':'write_report(NULL_CHAR*2 +chr(30)+NULL_CHAR*5)',
'2':'write_report(NULL_CHAR*2 +chr(31)+NULL_CHAR*5)',
'3':'write_report(NULL_CHAR*2 +chr(32)+NULL_CHAR*5)',
'4':'write_report(NULL_CHAR*2 +chr(33)+NULL_CHAR*5)',
'5':'write_report(NULL_CHAR*2 +chr(34)+NULL_CHAR*5)',
'6':'write_report(NULL_CHAR*2 +chr(35)+NULL_CHAR*5)',
'7':'write_report(NULL_CHAR*2 +chr(36)+NULL_CHAR*5)',
'8':'write_report(NULL_CHAR*2 +chr(37)+NULL_CHAR*5)',
'9':'write_report(NULL_CHAR*2 +chr(38)+NULL_CHAR*5)',
'0':'write_report(NULL_CHAR*2 +chr(39)+NULL_CHAR*5)',
'!':'write_report(chr(2)+NULL_CHAR+chr(30)+NULL_CHAR*5)',
'@':'write_report(chr(2)+NULL_CHAR+chr(31)+NULL_CHAR*5)',
'#':'write_report(chr(2)+NULL_CHAR+chr(32)+NULL_CHAR*5)',
'$':'write_report(chr(2)+NULL_CHAR+chr(33)+NULL_CHAR*5)',
'%':'write_report(chr(2)+NULL_CHAR+chr(34)+NULL_CHAR*5)',
'^':'write_report(chr(2)+NULL_CHAR+chr(35)+NULL_CHAR*5)',
'&':'write_report(chr(2)+NULL_CHAR+chr(36)+NULL_CHAR*5)',
'*':'write_report(chr(2)+NULL_CHAR+chr(37)+NULL_CHAR*5)',
'(':'write_report(chr(2)+NULL_CHAR+chr(38)+NULL_CHAR*5)',
')':'write_report(chr(2)+NULL_CHAR+chr(39)+NULL_CHAR*5)',
'ENTER':'write_report(NULL_CHAR*2 +chr(40)+NULL_CHAR*5)',
'ESC':'write_report(NULL_CHAR*2 +chr(41)+NULL_CHAR*5)',
'BACKSPACE':'write_report(NULL_CHAR*2 +chr(42)+NULL_CHAR*5)',
'TAB':'write_report(NULL_CHAR*2 +chr(43)+NULL_CHAR*5)',
'SPATIE':'write_report(NULL_CHAR*2 +chr(44)+NULL_CHAR*5)',
'-':'write_report(NULL_CHAR*2 +chr(45)+NULL_CHAR*5)',
'=':'write_report(NULL_CHAR*2 +chr(46)+NULL_CHAR*5)',
'{':'write_report(NULL_CHAR*2 +chr(47)+NULL_CHAR*5)',
'}':'write_report(NULL_CHAR*2 +chr(48)+NULL_CHAR*5)',
'\':'write_report(NULL_CHAR*2 +chr(49)+NULL_CHAR*5)',
'~':'write_report(NULL_CHAR*2 +chr(50)+NULL_CHAR*5)',
';':'write_report(NULL_CHAR*2 +chr(51)+NULL_CHAR*5)',
'':'write_report(NULL_CHAR*2 +chr(52)+NULL_CHAR*5)',
'`':'write_report(NULL_CHAR*2 +chr(53)+NULL_CHAR*5)',
',':'write_report(NULL_CHAR*2 +chr(54)+NULL_CHAR*5)',
'.':'write_report(NULL_CHAR*2 +chr(55)+NULL_CHAR*5)',
'/':'write_report(NULL_CHAR*2 +chr(56)+NULL_CHAR*5)',
'_':'write_report(chr(2)+NULL_CHAR+chr(45)+NULL_CHAR*5)',
'+':'write_report(chr(2)+NULL_CHAR+chr(46)+NULL_CHAR*5)',
'[':'write_report(chr(2)+NULL_CHAR+chr(47)+NULL_CHAR*5)',
']':'write_report(chr(2)+NULL_CHAR+chr(48)+NULL_CHAR*5)',
'|':'write_report(chr(2)+NULL_CHAR+chr(49)+NULL_CHAR*5)',
'0':'write_report(chr(2)+NULL_CHAR+chr(50)+NULL_CHAR*5)',
':':'write_report(chr(2)+NULL_CHAR+chr(51)+NULL_CHAR*5)',
'"':'write_report(chr(2)+NULL_CHAR+chr(52)+NULL_CHAR*5)',
'~':'write_report(chr(2)+NULL_CHAR+chr(53)+NULL_CHAR*5)',
'<':'write_report(chr(2)+NULL_CHAR+chr(54)+NULL_CHAR*5)',
'>':'write_report(chr(2)+NULL_CHAR+chr(55)+NULL_CHAR*5)',
'?':'write_report(chr(2)+NULL_CHAR+chr(56)+NULL_CHAR*5)',
'CAPSLOCK':'write_report(NULL_CHAR*2 +chr(57)+NULL_CHAR*5)',
'F1':'write_report(NULL_CHAR*2 +chr(58)+NULL_CHAR*5)',
'F2':'write_report(NULL_CHAR*2 +chr(59)+NULL_CHAR*5)',
'F3':'write_report(NULL_CHAR*2 +chr(60)+NULL_CHAR*5)',
'F4':'write_report(NULL_CHAR*2 +chr(61)+NULL_CHAR*5)',
'F5':'write_report(NULL_CHAR*2 +chr(62)+NULL_CHAR*5)',
'F6':'write_report(NULL_CHAR*2 +chr(63)+NULL_CHAR*5)',
'F7':'write_report(NULL_CHAR*2 +chr(64)+NULL_CHAR*5)',
'F8':'write_report(NULL_CHAR*2 +chr(65)+NULL_CHAR*5)',
'F9':'write_report(NULL_CHAR*2 +chr(66)+NULL_CHAR*5)',
'F10':'write_report(NULL_CHAR*2 +chr(67)+NULL_CHAR*5)',
'F11':'write_report(NULL_CHAR*2 +chr(68)+NULL_CHAR*5)',
'F12':'write_report(NULL_CHAR*2 +chr(69)+NULL_CHAR*5)',
'PRINT SCREEN':'write_report(NULL_CHAR*2 +chr(70)+NULL_CHAR*5)',
'SCROLL LOCK':'write_report(NULL_CHAR*2 +chr(71)+NULL_CHAR*5)',
'PAUSE':'write_report(NULL_CHAR*2 +chr(72)+NULL_CHAR*5)',
'INSERT':'write_report(NULL_CHAR*2 +chr(73)+NULL_CHAR*5)',
'HOME':'write_report(NULL_CHAR*2 +chr(74)+NULL_CHAR*5)',
'PAGEUP':'write_report(NULL_CHAR*2 +chr(75)+NULL_CHAR*5)',
'DELETE':'write_report(NULL_CHAR*2 +chr(76)+NULL_CHAR*5)',
'END':'write_report(NULL_CHAR*2 +chr(77)+NULL_CHAR*5)',
'PAGEDOWN':'write_report(NULL_CHAR*2 +chr(78)+NULL_CHAR*5)',
'}':'write_report(NULL_CHAR*2 +chr(79)+NULL_CHAR*5)',
'{':'write_report(NULL_CHAR*2 +chr(80)+NULL_CHAR*5)',
']':'write_report(chr(2)+NULL_CHAR+chr(79)+NULL_CHAR*5)',
'[':'write_report(chr(2)+NULL_CHAR+chr(80)+NULL_CHAR*5)',
'DOWN':'write_report(NULL_CHAR*2 +chr(81)+NULL_CHAR*5)',
'UP':'write_report(NULL_CHAR*2 +chr(82)+NULL_CHAR*5)',
'NUM LOCK':'write_report(NULL_CHAR*2 +chr(83)+NULL_CHAR*5)',
'Keypad SLASH (/)':'write_report(NULL_CHAR*2 +chr(84)+NULL_CHAR*5)',
'Keypad ASTERISK (*)':'write_report(NULL_CHAR*2 +chr(85)+NULL_CHAR*5)',
'Keypad MINUS (-)':'write_report(NULL_CHAR*2 +chr(86)+NULL_CHAR*5)',
'Keypad PLUS (+)':'write_report(NULL_CHAR*2 +chr(87)+NULL_CHAR*5)',
'Keypad ENTER':'write_report(NULL_CHAR*2 +chr(88)+NULL_CHAR*5)',
'Keypad 1':'write_report(NULL_CHAR*2 +chr(89)+NULL_CHAR*5)',
'Keypad 2':'write_report(NULL_CHAR*2 +chr(90)+NULL_CHAR*5)',
'Keypad 3':'write_report(NULL_CHAR*2 +chr(91)+NULL_CHAR*5)',
'Keypad 4':'write_report(NULL_CHAR*2 +chr(92)+NULL_CHAR*5)',
'Keypad END':'write_report(chr(2)+NULL_CHAR+chr(89)+NULL_CHAR*5)',
'Keypad DOWN':'write_report(chr(2)+NULL_CHAR+chr(90)+NULL_CHAR*5)',
'Keypad PAGEDOWN':'write_report(chr(2)+NULL_CHAR+chr(91)+NULL_CHAR*5)',
'Keypad LEFT':'write_report(chr(2)+NULL_CHAR+chr(92)+NULL_CHAR*5)',
'Keypad 5':'write_report(NULL_CHAR*2 +chr(93)+NULL_CHAR*5)',
'Keypad 6':'write_report(NULL_CHAR*2 +chr(94)+NULL_CHAR*5)',
'Keypad 7':'write_report(NULL_CHAR*2 +chr(95)+NULL_CHAR*5)',
'Keypad 8':'write_report(NULL_CHAR*2 +chr(96)+NULL_CHAR*5)',
'Keypad 9':'write_report(NULL_CHAR*2 +chr(97)+NULL_CHAR*5)',
'Keypad 0':'write_report(NULL_CHAR*2 +chr(98)+NULL_CHAR*5)',
'Keypad DOT (.)':'write_report(NULL_CHAR*2 +chr(99)+NULL_CHAR*5)',
'Non-US Slash \':'write_report(NULL_CHAR*2 +chr(100)+NULL_CHAR*5)',
'Keypad RIGHT':'write_report(chr(2)+NULL_CHAR+chr(94)+NULL_CHAR*5)',
'Keypad HOME':'write_report(chr(2)+NULL_CHAR+chr(95)+NULL_CHAR*5)',
'Keypad UP':'write_report(chr(2)+NULL_CHAR+chr(96)+NULL_CHAR*5)',
'Keypad PAGEUP':'write_report(chr(2)+NULL_CHAR+chr(97)+NULL_CHAR*5)',
'Keypad INSERT':'write_report(chr(2)+NULL_CHAR+chr(98)+NULL_CHAR*5)',
'Keypad DEL':'write_report(chr(2)+NULL_CHAR+chr(99)+NULL_CHAR*5)',
'Non-US Slash |':'write_report(chr(2)+NULL_CHAR+chr(100)+NULL_CHAR*5)',
'COMPOSE / APPLICATION':'write_report(NULL_CHAR*2 +chr(101)+NULL_CHAR*5)',
'POWER':'write_report(NULL_CHAR*2 +chr(102)+NULL_CHAR*5)',
'Keypad EQUAL (=)':'write_report(NULL_CHAR*2 +chr(103)+NULL_CHAR*5)',
'F13':'write_report(NULL_CHAR*2 +chr(104)+NULL_CHAR*5)',
'F14':'write_report(NULL_CHAR*2 +chr(105)+NULL_CHAR*5)',
'F15':'write_report(NULL_CHAR*2 +chr(106)+NULL_CHAR*5)',
'F16':'write_report(NULL_CHAR*2 +chr(107)+NULL_CHAR*5)',
'F17':'write_report(NULL_CHAR*2 +chr(108)+NULL_CHAR*5)',
'F18':'write_report(NULL_CHAR*2 +chr(109)+NULL_CHAR*5)',
'F19':'write_report(NULL_CHAR*2 +chr(110)+NULL_CHAR*5)',
'F20':'write_report(NULL_CHAR*2 +chr(111)+NULL_CHAR*5)',
'F21':'write_report(NULL_CHAR*2 +chr(112)+NULL_CHAR*5)',
'F22':'write_report(NULL_CHAR*2 +chr(113)+NULL_CHAR*5)',
'F23':'write_report(NULL_CHAR*2 +chr(114)+NULL_CHAR*5)',
'F24':'write_report(NULL_CHAR*2 +chr(115)+NULL_CHAR*5)',
'EXECUTE':'write_report(NULL_CHAR*2 +chr(116)+NULL_CHAR*5)',
'HELP':'write_report(NULL_CHAR*2 +chr(117)+NULL_CHAR*5)',
'MENU':'write_report(NULL_CHAR*2 +chr(118)+NULL_CHAR*5)',
'SELECT':'write_report(NULL_CHAR*2 +chr(119)+NULL_CHAR*5)',
'STOP':'write_report(NULL_CHAR*2 +chr(120)+NULL_CHAR*5)',
'AGAIN':'write_report(NULL_CHAR*2 +chr(121)+NULL_CHAR*5)',
'UNCO':'write_report(NULL_CHAR*2 +chr(122)+NULL_CHAR*5)',
'CUT':'write_report(NULL_CHAR*2 +chr(123)+NULL_CHAR*5)',
'COPY':'write_report(NULL_CHAR*2 +chr(124)+NULL_CHAR*5)',
'PASTE':'write_report(NULL_CHAR*2 +chr(125)+NULL_CHAR*5)',
'FIND':'write_report(NULL_CHAR*2 +chr(126)+NULL_CHAR*5)',
'MUTE':'write_report(NULL_CHAR*2 +chr(127)+NULL_CHAR*5)',
'VOLUME UP':'write_report(NULL_CHAR*2 +chr(128)+NULL_CHAR*5)',
'VOLUME DOWN':'write_report(NULL_CHAR*2 +chr(129)+NULL_CHAR*5)',
'CTRL + ALT + DEL':'write_report(chr(5)+NULL_CHAR+chr(76)+NULL_CHAR*5)',
'CTRL + w':'write_report(chr(1)+NULL_CHAR+chr(26)+NULL_CHAR*5)',
'WIN + TAB':'write_report(chr(8)+NULL_CHAR+chr(43)+NULL_CHAR*5)',
'ALT + TAB':'write_report(chr(4)+NULL_CHAR+chr(43)+NULL_CHAR*5)',
'CTRL + F':'write_report(chr(1)+NULL_CHAR+chr(9)+NULL_CHAR*5)',
'CTRL + ALT +     ARROWDOWN':'write_report(chr(5)+NULL_CHAR+chr(81)+NULL_CHAR*5)',
}

user_input = input("Please tell me what you would like to translate: ")

#Create an empty list which we will fill later
translated_list = []

#FOR Loop, loops every letter trough dictionary and saves translation in             translated_list
for letter in user_input:
   if letter in values:
       translated_list.append(values[letter])

#Print the translated command
#The current command removes the comma's and brackets by making the output a string and devides every string by a whiteline
if LIST == 1:
    print ("\n")
    print ("\n")
    print ("This is the translated command:")
    print ("________________________________")
    print("\n".join(translated_list))

#Write keyboard codes to the HID device
if EXECUTE == 1:
    exec("\n".join(translated_list))
    #End with a NULL command to release all keys and avoid a endless string
    write_report(NULL_CHAR * 8)

您键入:

for letter in user_input:
   if letter in values:
       translated_list.append(values[letter])

不需要添加 (values[letter])

我通过以下操作修复了您代码的重复部分:

for letter in user_input:
    if letter in values:
        translated_list.append(letter)

感谢您的帮助。问题解决了!我已经稍微重写了代码并弄清楚了如何让它工作!谢谢!

工作代码是:

#!/usr/bin/python

"""
HID Keyboard Mapper
Version: 1.0
By: Jarno Baselier
Date: 2018
URL: www.jarnobaselier.nl

Deze HID Keyboard Mapper is speciaal gemaakt om snel toetsenbord keystrokes
om te zetten naar Python en door te zetten naar het HID device.
Stel voor dat je een Raspberry Pi USB poort (zoals op de Zero mogelijk is)
configureerd als HID device en aansluit op een computer dan kun je vanuit
deze Python convertor meteen keystrokes sturen naar de aangesloten computer.
"""

#Imports

#Program variables
LIST    = 1     #If LIST is 1 than complete keymap code is shown on screen
EXECUTE    = 1     #If EXECUTE is 1 than complete keymap code is send to the HID device and executed

#Variables
NULL_CHAR = chr(0)

#Functions
#Create write_report function to write HID codes to the HID Keyboard
def write_report(report):
    with open('/dev/hidg0', 'rb+') as fd:
        fd.write(report.encode())

#Dictionary
values = {
'a':'write_report(NULL_CHAR*2 +chr(4)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'b':'write_report(NULL_CHAR*2 +chr(5)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'c':'write_report(NULL_CHAR*2 +chr(6)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'd':'write_report(NULL_CHAR*2 +chr(7)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'e':'write_report(NULL_CHAR*2 +chr(8)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'f':'write_report(NULL_CHAR*2 +chr(9)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'g':'write_report(NULL_CHAR*2 +chr(10)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'h':'write_report(NULL_CHAR*2 +chr(11)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'i':'write_report(NULL_CHAR*2 +chr(12)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'j':'write_report(NULL_CHAR*2 +chr(13)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'k':'write_report(NULL_CHAR*2 +chr(14)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'l':'write_report(NULL_CHAR*2 +chr(15)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'm':'write_report(NULL_CHAR*2 +chr(16)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'n':'write_report(NULL_CHAR*2 +chr(17)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'o':'write_report(NULL_CHAR*2 +chr(18)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'p':'write_report(NULL_CHAR*2 +chr(19)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'q':'write_report(NULL_CHAR*2 +chr(20)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'r':'write_report(NULL_CHAR*2 +chr(21)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
's':'write_report(NULL_CHAR*2 +chr(22)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
't':'write_report(NULL_CHAR*2 +chr(23)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'u':'write_report(NULL_CHAR*2 +chr(24)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'v':'write_report(NULL_CHAR*2 +chr(25)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'w':'write_report(NULL_CHAR*2 +chr(26)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'x':'write_report(NULL_CHAR*2 +chr(27)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'y':'write_report(NULL_CHAR*2 +chr(28)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'z':'write_report(NULL_CHAR*2 +chr(29)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'A':'write_report(chr(2)+NULL_CHAR+chr(4)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'B':'write_report(chr(2)+NULL_CHAR+chr(5)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'C':'write_report(chr(2)+NULL_CHAR+chr(6)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'D':'write_report(chr(2)+NULL_CHAR+chr(7)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'E':'write_report(chr(2)+NULL_CHAR+chr(8)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'F':'write_report(chr(2)+NULL_CHAR+chr(9)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'G':'write_report(chr(2)+NULL_CHAR+chr(10)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'H':'write_report(chr(2)+NULL_CHAR+chr(11)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'I':'write_report(chr(2)+NULL_CHAR+chr(12)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'J':'write_report(chr(2)+NULL_CHAR+chr(13)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'K':'write_report(chr(2)+NULL_CHAR+chr(14)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'L':'write_report(chr(2)+NULL_CHAR+chr(15)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'M':'write_report(chr(2)+NULL_CHAR+chr(16)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'N':'write_report(chr(2)+NULL_CHAR+chr(17)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'O':'write_report(chr(2)+NULL_CHAR+chr(18)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'P':'write_report(chr(2)+NULL_CHAR+chr(19)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'Q':'write_report(chr(2)+NULL_CHAR+chr(20)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'R':'write_report(chr(2)+NULL_CHAR+chr(21)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'S':'write_report(chr(2)+NULL_CHAR+chr(22)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'T':'write_report(chr(2)+NULL_CHAR+chr(23)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'U':'write_report(chr(2)+NULL_CHAR+chr(24)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'V':'write_report(chr(2)+NULL_CHAR+chr(25)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'W':'write_report(chr(2)+NULL_CHAR+chr(26)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'X':'write_report(chr(2)+NULL_CHAR+chr(27)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'Y':'write_report(chr(2)+NULL_CHAR+chr(28)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'Z':'write_report(chr(2)+NULL_CHAR+chr(29)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'1':'write_report(NULL_CHAR*2 +chr(30)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'2':'write_report(NULL_CHAR*2 +chr(31)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'3':'write_report(NULL_CHAR*2 +chr(32)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'4':'write_report(NULL_CHAR*2 +chr(33)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'5':'write_report(NULL_CHAR*2 +chr(34)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'6':'write_report(NULL_CHAR*2 +chr(35)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'7':'write_report(NULL_CHAR*2 +chr(36)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'8':'write_report(NULL_CHAR*2 +chr(37)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'9':'write_report(NULL_CHAR*2 +chr(38)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'0':'write_report(NULL_CHAR*2 +chr(39)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'!':'write_report(chr(2)+NULL_CHAR+chr(30)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'@':'write_report(chr(2)+NULL_CHAR+chr(31)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'#':'write_report(chr(2)+NULL_CHAR+chr(32)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'&':'write_report(chr(2)+NULL_CHAR+chr(36)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'*':'write_report(chr(2)+NULL_CHAR+chr(37)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'(':'write_report(chr(2)+NULL_CHAR+chr(38)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
')':'write_report(chr(2)+NULL_CHAR+chr(39)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'-':'write_report(NULL_CHAR*2 +chr(45)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'=':'write_report(NULL_CHAR*2 +chr(46)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'{':'write_report(NULL_CHAR*2 +chr(47)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'}':'write_report(NULL_CHAR*2 +chr(48)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'\':'write_report(NULL_CHAR*2 +chr(49)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
';':'write_report(NULL_CHAR*2 +chr(51)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'':'write_report(NULL_CHAR*2 +chr(52)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'`':'write_report(NULL_CHAR*2 +chr(53)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
',':'write_report(NULL_CHAR*2 +chr(54)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'.':'write_report(NULL_CHAR*2 +chr(55)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'/':'write_report(NULL_CHAR*2 +chr(56)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'0':'write_report(chr(2)+NULL_CHAR+chr(50)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
':':'write_report(chr(2)+NULL_CHAR+chr(51)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'"':'write_report(chr(2)+NULL_CHAR+chr(52)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'<':'write_report(chr(2)+NULL_CHAR+chr(54)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'>':'write_report(chr(2)+NULL_CHAR+chr(55)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'?':'write_report(chr(2)+NULL_CHAR+chr(56)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'}':'write_report(NULL_CHAR*2 +chr(79)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'{':'write_report(NULL_CHAR*2 +chr(80)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
']':'write_report(chr(2)+NULL_CHAR+chr(79)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',
'[':'write_report(chr(2)+NULL_CHAR+chr(80)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)',

#Next Signs are used for different keymappings - change if you want to
'$':'write_report(NULL_CHAR*2 +chr(40)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)', #ENTER
'%':'write_report(NULL_CHAR*2 +chr(41)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)', #ESC
'^':'write_report(NULL_CHAR*2 +chr(42)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)', #BACKSPACE
'~':'write_report(NULL_CHAR*2 +chr(43)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)', #TAB
'_':'write_report(NULL_CHAR*2 +chr(44)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)', #SPATIE
'+':'write_report(NULL_CHAR*2 +chr(70)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)', #PRINT SCREEN
'[':'write_report(NULL_CHAR*2 +chr(76)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)', #DELETE
']':'write_report(chr(5)+NULL_CHAR+chr(76)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)', #CTRL+ALT+DEL
'|':'write_report(NULL_CHAR*2 +chr(81)+NULL_CHAR*5)\nwrite_report(NULL_CHAR * 8)', #DOWN
}

user_input = input("Please tell me what you would like to translate: ")

#Create an empty list which we will fill later
translated_list = []

#FOR Loop, loops every letter trough dictionary and saves translation in             translated_list
for letter in user_input:
   if letter in values:
       translated_list.append(values[letter])

#Print the translated command
#The current command removes the comma's and brackets by making the output a string and devides every string by a whiteline
if LIST == 1:
    print ("\n")
    print ("\n")
    print ("Below is the translated script, ready to copy-paste:")
    print ("____________________________________________________")
    print ("#!/usr/bin/env python3")
    print ("NULL_CHAR = chr(0)")
    print ("")
    print ("def write_report(report):")
    print ("    with open('/dev/hidg0', 'rb+') as fd:")
    print ("        fd.write(report.encode())")
    print ("")
    print("\n".join(translated_list))

#Write keyboard codes to the HID device
if EXECUTE == 1:
    exec ("\n".join(translated_list))
    #End with a NULL command to release all keys and avoid a endless string
    write_report(NULL_CHAR * 8)