תנאים מרובים py
-
שלום! אני מנסה ליצור רשימת תנאים בתגובה ללחיצה על כל מקש.
יש דרך להחליף את כל הIF'ים למשהו יותר יעיל ונקי?(המו"מ של @LindoorsOS לא מועיל לי):
from pynput import keyboard a = '' def on_press(key): try: if key == keyboard.Key.insert: global a a= a+'0' print('----0') elif key == keyboard.Key.delete: a= a+'0' print('----.') a= a+'99' elif key == keyboard.Key.enter: # #Stop listener return False elif key == keyboard.Key.end: a= a+ '1' print('--------1') elif key == keyboard.Key.down: a= a+ '2' print('-------2') elif key == keyboard.Key.page_down: a= a+ '3' print('----------3') elif key == keyboard.Key.left: a= a+ '4' print('---------4') elif key == keyboard.Key.right: print('--------6') a= a+ '6' elif key == '+': a=a + '5' print('--------5') elif key == keyboard.Key.up: a= a+ '8' print('-------8') elif key == keyboard.Key.page_up: a=a + '9' print('--------9') elif key == keyboard.Key.home: a=a+ '7' print('----------7') else: a=a+ '5' print('-------5') print('alphanumeric key {0} pressed'.format(key.char)) except AttributeError: print('err') print('special key {0} pressed'.format(key)) def on_release(key): a = '0' with keyboard.Listener( on_press=on_press, on_release=on_release) as listener: listener.join() listener = keyboard.Listener( on_press=on_press, on_release=on_release) listener.start() print(a)
תודה!
-
@chv התכוונת ל-
switch
? לא ברור לי איךwhile
יכול לעזור פה.
(אגב, גם אני הצהרתי לפני לא הרבה זמן שאני לא מבין בתכנות, וב"ה אני מתקדם די יפה, תחזור עוד שנה ונראה...)בכל מקרה, בפייתון אין מבנה
switch
, לפעמים זה באמת יכול להיות קצת חסר (למשל כאשר יש פעולה שונה לגמרי לכל מקש), אבל במקרה הזה הכל לטובה, כי באמת אפשר לשפר את הקוד עד שלא יהיה צורך ב-switch
. וזאת על ידיdict
שממפה כל מקש לערך מתאים ובכל לחיצה של מקש אתה פשוט שולף את הערך המתאים מה-dict
ומוסיף אותו למשתנהa
. -
@yossiz אכן זה היה הפתרון המוצלח. תודה לך.
בזכות זה הרווחנו 2 דברים:
א. פיתרון לבאג בקשר למקש 5. כי בספריה זו המקשים הימניים מוגדרים כמקשי פונקציה ולמקש 5 אין פונקציה.
ב. הקלדה כמו בפלאפון פלט של אותיות.
האם אפשר לקצר עוד?
קוד של א':mmm = { 'Key.insert': '0' , 'Key.delete' : '88' , 'Key.end': '1' , 'Key.home': '7', 'Key.down': '2' , 'Key.page_down': '3' , 'Key.left':'4' , 'Key.right':'5' , 'Key.up': '8' , 'Key.page_up':'9' ,'<12>': '5', '<97>': '1' , '<98>' : '2' , '<99>': '3' , '<100>': '4', '<101>': '5' , '<102>' : '6','<103>': '7', '<104>': '8', '<105>': '9', 'num_lock': '0' , '<96>': '0' ,"'-'": '0' ,"'*'": '0' ,"'/'": '0' ,"'+'": '0'} from pynput import keyboard a = '' def on_press(key): try: akk = str(key) print(akk) if key != keyboard.Key.enter: y = str((mmm[akk])) global a a= a + y if key == keyboard.Key.enter: return False #print('alphanumeric key {0} pressed'.format(key.char)) except AttributeError: print('err') print('special key {0} pressed'.format(key)) def on_release(key): a = '0' #print('{0} released'.format(key)) # Stop listener #return False # Collect events until released with keyboard.Listener( on_press=on_press, on_release=on_release) as listener: listener.join() # ...or, in a non-blocking fashion: listener = keyboard.Listener( on_press=on_press, on_release=on_release) listener.start() print(a)
קוד לב' - הקלדה כמו פלאפון (כשר..)
mmm = { 'Key.insert': '0' , 'Key.delete' : ' ' , 'Key.end': '1' , 'Key.home': '7', 'Key.down': '2' , 'Key.page_down': '3' , 'Key.left':'4' , 'Key.right':'5' , 'Key.up': '8' , 'Key.page_up':'9' ,'<12>': '5', '<97>': '1' , '<98>' : '2' , '<99>': '3' , '<100>': '4', '<101>': '5' , '<102>' : '6','<103>': '7', '<104>': '8', '<105>': '9','<110>': ' ', 'num_lock': '0' , '<96>': '0' ,"'-'": '-' ,"'*'": '*' ,"'/'": '/' ,"'+'": '+'} nam = {'1':'א', '11':'ב', '2':'ג', '22':'ד','3':'ה', '33':'ו', '4':'ז', '44':'ח','5':'ט', '55':'י', '6':'כ', '66':'ל','7':'מ', '77':'נ', '8':'ס', '88':'ע','9':'פ', '99':'צ', '0':'ק', '00':'ר','+':'ש', '++':'ת', '-':'ך', '--':'ץ','*':'ף', '**':'ם', '.':' '} from pynput import keyboard a = '' b = '' t = '' def on_press(key): try: akk = str(key) #print(akk) if key != keyboard.Key.enter: y = str((mmm[akk])) global a a= a + y if key == keyboard.Key.enter: return False except AttributeError: print('err') print('special key {0} pressed'.format(key)) def on_release(key): a = '0' with keyboard.Listener( on_press=on_press, on_release=on_release) as listener: listener.join() listener = keyboard.Listener( on_press=on_press, on_release=on_release) listener.start() #print(a) e =(a.split()) #print(e) for i in e: u = str((nam[i])) t = t + u print(t)