如何在While循环中执行指定代码段?兼ESC键按两次问题排查
问题修复方案
1. ESC键需按两次的问题修复
原代码进入子菜单后连续调用了两次msvcrt.getch():第一次判断是否为ENTER,第二次判断是否为ESC。这导致按ESC时,第一次getch()读取了ESC但不满足第一个条件,第二次getch()需要再读一次按键才会触发ESC逻辑。
解决方法:只调用一次msvcrt.getch(),将读取到的字符码存入变量后统一判断:
if o == '1': option_sub01() key_code = ord(msvcrt.getch()) if key_code == 13: option01() print() elif key_code == 27: continue else: print("Wrong input.")
2. QUESTION #2输入错误时直接重试的问题修复
原代码中输入非'y'/'n'时,要么直接返回主菜单,要么重新执行整个循环(包括QUESTION #1)。要实现跳过QUESTION #1直接回到QUESTION #2重试,需将QUESTION #2的输入逻辑单独封装为循环,直到用户输入合法值为止。
修改option01()函数如下:
def option01(): while True: # QUESTION #1 print("Question #1") # do stuff# print("doing stuff...") time.sleep(3) # QUESTION #2 循环直到输入合法 while True: check = input("""Question #2, press 'y' to continue loop and do stuff again, or 'n' to break loop and return to main menu.""") if check == 'y': break # 退出小循环,继续执行大循环的QUESTION #1 elif check == 'n': return # 直接返回主菜单 else: print("Wrong Input. Please enter 'y' or 'n'.")
这里用return替代原有的break,直接结束option01()函数回到主菜单;输入错误时不退出小循环,持续提示用户输入直到合法。
完整修复后的代码
import msvcrt import time # FUNCTIONS def menu_options(): print("MAIN MENU Options") def option_sub01(): print("SUB MENU Options, press ENTER to continue or ESC to exit") def option01(): while True: # QUESTION #1 print("Question #1") # do stuff# print("doing stuff...") time.sleep(3) # QUESTION #2 循环直到输入合法 while True: check = input("""Question #2, press 'y' to continue loop and do stuff again, or 'n' to break loop and return to main menu.""") if check == 'y': break # 退出小循环,继续执行大循环的QUESTION #1 elif check == 'n': return # 直接返回主菜单 else: print("Wrong Input. Please enter 'y' or 'n'.") # START while True: menu_options() o = input("Choose an option (only option 1 works): ") if o == '1': option_sub01() key_code = ord(msvcrt.getch()) if key_code == 13: option01() print() elif key_code == 27: continue else: print("Wrong input.")
内容的提问来源于stack exchange,提问作者Strider
相关产品推荐
相关产品推荐

