You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:31:11