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
相关产品推荐
相关产品推荐

