python基础问题while True循环问题

求问:第二个while True的判断好像有点问题,我输入0之后,然后输入除了y和n之外的字符会一直循环,怎么解决呢?

def show_menu():
    """显示菜单"""
    print("*" * 20)
    print("欢迎丹仪使用【名片管理系统】V1.0")
    print("*" * 20)


def new_card():
    print("-" * 20)
    print("新增名片")


def show_all():
    print("-" * 20)
    print("显示所有名片")


def search_card():
    print("-" * 20)
    print("搜索名片")
import A_31_project1tools
while True:
    # TODO 还需要在这里显示一个功能菜单(todo注释)
    A_31_project1tools.show_menu()
    act_str = input("请选择希望执行的操作:(0退出系统/1新增名片/2显示所有名片/3搜索名片,请任选一个)")
    print("您选择的操作是【%s】" % act_str)
    # 选项:0退出,1
    if act_str in ["1", "2", "3"]:
        if act_str == "1":
            A_31_project1tools.new_card()
        elif act_str == "2":
            A_31_project1tools.show_all()
        elif act_str == "3":
            A_31_project1tools.search_card()
    elif act_str == "0":
        ans_str = input("您确定要退出系统吗?回答y/n:")
        if ans_str in ["y"]:
            break
        while True:
            if ans_str not in ["y", "n"]:
                print("您输入的不正确,请重新输入并注意小写")
            elif ans_str in ["n"]:
                break
            else:
                break
    else:
        print("输入的数字不正确哦~要重新输入")

基于Monster 组和GPT的调写:

你在处理退出确认的部分时,你的循环逻辑有点问题。你应该在用户输入不是"y"或"n"的情况下循环询问,直到用户输入正确的确认字符。以下是修复后的代码:

def show_menu():
    """显示菜单"""
    print("*" * 20)
    print("欢迎丹仪使用【名片管理系统】V1.0")
    print("*" * 20)
 
 
def new_card():
    print("-" * 20)
    print("新增名片")
 
 
def show_all():
    print("-" * 20)
    print("显示所有名片")
 
 
def search_card():
    print("-" * 20)
    print("搜索名片")

import A_31_project1tools
while True:
    A_31_project1tools.show_menu()
    act_str = input("请选择希望执行的操作:(0退出系统/1新增名片/2显示所有名片/3搜索名片,请任选一个)")
    print("您选择的操作是【%s】" % act_str)
    if act_str in ["1", "2", "3"]:
        if act_str == "1":
            A_31_project1tools.new_card()
        elif act_str == "2":
            A_31_project1tools.show_all()
        elif act_str == "3":
            A_31_project1tools.search_card()
    elif act_str == "0":
        while True:
            ans_str = input("您确定要退出系统吗?回答y/n:")
            if ans_str in ["y"]:
                break
            elif ans_str in ["n"]:
                break
            else:
                print("您输入的不正确,请重新输入并注意小写")
        if ans_str == "y":
            break
    else:
        print("输入的数字不正确哦~要重新输入")

在这个修正的版本中,当用户选择退出系统(即输入0)时,程序将进入一个新的循环,询问用户是否真的想要退出。如果用户输入"y",那么外层的主循环将会结束,程序退出。如果用户输入"n",那么程序将跳出内层循环,返回到主菜单。如果用户输入的既不是"y"也不是"n",那么程序将提示用户输入不正确,并再次询问,直到用户输入正确的确认字符。