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

Python Match Case菜单疑问:重复打印及字典适配可行性

关于Match Case菜单程序的两个问题解答

1. 如何实现菜单重复打印?

可以用while循环包裹菜单打印、输入获取和Match Case逻辑,设置循环终止条件即可实现重复展示菜单。修改后的代码示例如下:

menu = """
1. Datos del pasajero.
2. Agrega una ciudad. 
3. Ingresa DNI para ver las ciudades que coinciden con el dato.
4. Escribe una ciudad para ver el # de pasajeros.
5. Ingresa DNI para ver los paises que coinciden con el dato.
6. Ingresa un pais y mostrar el total de personas que viajan.
7. Terminar el programa
"""

viajeros = {}
paises = {}

while True:
    print(menu)
    # 处理非数字输入的异常
    try:
        dato_leido = int(input('Escriba una opcion para comenzar con el programa: '))
    except ValueError:
        print("Por favor ingrese un número válido.")
        continue
    
    match dato_leido:
        case 1:
            print('Escriba los datos del pasajero: ')
            # 示例:向字典添加乘客数据
            dni = input("Ingrese DNI: ")
            nombre = input("Ingrese nombre: ")
            viajeros[dni] = {"nombre": nombre, "ciudades": [], "paises": []}
            print(f"Pasajero {nombre} agregado correctamente.")
        case 2:
            print('Agrega una ciudad a la lista:')
            # 示例:给指定乘客追加城市信息
            dni = input("Ingrese DNI del pasajero: ")
            ciudad = input("Ingrese ciudad: ")
            if dni in viajeros:
                viajeros[dni]["ciudades"].append(ciudad)
                print(f"Ciudad {ciudad} agregada para {viajeros[dni]['nombre']}.")
            else:
                print("Pasajero no encontrado.")
        case 3:
            print('Ingresa el DNI del pasajero para ver a que ciudad ha viajado: ')
            dni = input("Ingrese DNI: ")
            if dni in viajeros:
                print(f"Ciudades visitadas: {', '.join(viajeros[dni]['ciudades'])}")
            else:
                print("Pasajero no encontrado.")
        case 4:
            print('Ingrese una ciudad para ver el numero de pasajeros: ')
            ciudad = input("Ingrese ciudad: ")
            contador = sum(1 for p in viajeros.values() if ciudad in p["ciudades"])
            print(f"Numero de pasajeros que visitaron {ciudad}: {contador}")
        case 5:
            print('Ingresa el DNI de una persona para ver a que paises viaja: ')
            dni = input("Ingrese DNI: ")
            if dni in viajeros:
                print(f"Paises visitados: {', '.join(viajeros[dni]['paises'])}")
            else:
                print("Pasajero no encontrado.")
        case 6:
            print('Ingresa un pais y mostrar el total de personas que viajan: ')
            pais = input("Ingrese pais: ")
            contador = sum(1 for p in viajeros.values() if pais in p["paises"])
            print(f"Numero de pasajeros que visitaron {pais}: {contador}")
        case 7:
            print('Saliendo del programa en 3, 2, 1(FIN).')
            break  # 终止循环,退出程序
        case _:
            print("Opción no válida, por favor elija nuevamente.")

核心逻辑说明:

  • 用while True创建无限循环,每次循环都会重新打印菜单并获取用户输入
  • 加入try-except处理非数字输入的异常,避免程序崩溃
  • 用户选择选项7时,用break终止循环,其他选项执行完逻辑后自动回到循环开头,重新展示菜单

2. Match Case是否适用于后续字典操作?

完全适用,不需要改用IF语句。Match Case和字典操作没有冲突,反而在处理固定值分支(如菜单数字选项)时,语法比IF语句更简洁、可读性更高。

上面的代码示例已经在各个case分支中集成了字典的增、查、统计等操作,比如向viajeros字典添加乘客数据、追加城市信息、统计去过某城市的乘客数量等,这些操作都能和Match Case完美配合。后续扩展菜单选项或字典操作逻辑时,Match Case的结构也会更易于维护。

内容的提问来源于stack exchange,提问作者Staryellow

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:05:21