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

Python中未处于WHILE/FOR循环时,如何跳转回指定代码行?

Python输入验证失败后实现流程重启的方案

问题描述

现有一段Python代码用于检查输入是否在预设列表中,若输入无效则允许用户重试最多3次;当3次都输入错误时,希望实现重新开始整个流程的效果,但不清楚如何在循环退出后跳转回初始输入步骤。原代码如下:

# Variables:

healthy = ["potato", "tomato"]

counter_ = 0

limit_ = 3

while counter_ < limit_:
    
    shopping_list = []
    wanted_item = input("What to get? \n").lower()
    if wanted_item not in healthy:
        counter_ += 1
        print("Try again")
        continue
    if wanted_item in healthy:
        shopping_list.append(wanted_item)
        break
    else:
        break

if counter_ >= limit_:

    print("Start over")
    #problem area

else:

    print("That's a good list")
    print(shopping_list)

解决方案

Python不支持直接的代码行跳转(如goto语句),推荐用外层循环包裹或函数封装的方式实现流程重启,逻辑清晰且易于维护。

方法1:外层无限循环(推荐)

将整个验证流程放到一个外层无限循环中,当3次输入错误时,自动回到流程开头重新执行:

healthy = ["potato", "tomato"]

while True:
    counter_ = 0
    limit_ = 3
    shopping_list = []
    
    while counter_ < limit_:
        wanted_item = input("What to get? \n").lower()
        if wanted_item not in healthy:
            counter_ += 1
            if counter_ < limit_:
                print(f"Try again. {limit_ - counter_} attempts remaining.")
            continue
        # 输入有效,添加到列表并结束流程
        shopping_list.append(wanted_item)
        print("That's a good list")
        print(shopping_list)
        exit()  # 或用break跳出外层循环,根据需求调整
    
    # 3次输入错误,触发重启
    print("Start over")

方法2:函数封装+递归调用

将验证逻辑封装为函数,当3次失败时递归调用自身实现重启:

healthy = ["potato", "tomato"]

def get_valid_shopping_item():
    counter_ = 0
    limit_ = 3
    shopping_list = []
    
    while counter_ < limit_:
        wanted_item = input("What to get? \n").lower()
        if wanted_item not in healthy:
            counter_ += 1
            if counter_ < limit_:
                print(f"Try again. {limit_ - counter_} attempts left.")
            continue
        # 输入有效,输出结果并返回
        shopping_list.append(wanted_item)
        print("That's a good list")
        print(shopping_list)
        return
    
    # 3次失败,重启函数
    print("Start over")
    get_valid_shopping_item()

# 启动流程
get_valid_shopping_item()

注意事项

  • 递归方法存在栈溢出风险(若用户持续输入错误),因此外层循环的方式更适合大规模场景;
  • 避免使用跳转语句,通过循环/函数组织逻辑能让代码结构更清晰,降低维护成本。

内容的提问来源于stack exchange,提问作者The Fearsome Asian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 23:54:23