-
AutorEntradas
-
11 octubre, 2022 a las 5:51 pm #20821
Jordi Malapeira PeinadoParticipanteHola a todos, añado aqui una solución al ejercicio planteado en el video 022 – Bucles y diccionarios, resuelto con lo que hemos visto hasta el momento, sin utilizar setdefault(), para aquel que lo haya intentado resolver así, como yo y le pueda interesar. Un saludo a todos alumnos
# 022 - Bucles y diccionarios # Ejercicio 01 - JMP # CLAVE:VALOR # Escribir un programa que vaya pidiendo pais (clave) y ciudad (valor) para crear un diccionario # Esto se repetirá hasta que en el pais introduzcamos "salir" donde acabará presentará el diccionario. # Si introducimos varias ciudades de un mismo pais, estas, formarán parte de una lista de valores de la # clave del país correxpondiente # Definimos el diccionario, vacío al principio del programa ciudades={} while True: # Introduce el país y la ciudad # Si pais = "Salir" termina el bucle infinito e imprime el diccionario pais = input("Introduce un país: ") if pais == "salir": break ciudad = input("introduce una ciudad: ") # Definimos una lista vacía de ciudades Listaciudades=[] # Utilizamos una variable BOOL para saber si hemos encontrado el pais # Inicialmente le damos valor False paisencontrado = False # Recorremos el diccionario buscando el país que hemos introducido for i in ciudades: # Pais encontrado en las claves del dicionario if i == pais: # Asignamos a listaciudades (que es una lista vacia) el valor de la clave pais Listaciudades = ciudades[pais] # Comprobamos si la ciudad introducida ya está en la lista de ciudades de la clave pais if ciudad not in Listaciudades: # Como no está, añadimos la ciudad introducida a la lista de ciudades # que contiene la lista anteriormente introducida Listaciudades.append(ciudad) # Ahora actualizamos la CLAVE:VALOR del pais con la nueva lista de ciudades actualizada ciudades[pais] = Listaciudades # Indicamos en la variable BOOL de apoyo que = True porque hemos encontrado el pais # (hayamos o no encontrado la ciudad) paisencontrado = True # Una vez terminado de recorrer el diccionario (terminado el for) miramos si hemos encontrado el pais # con la variable BOOL paisencontrado que estará a True si hemos encontrado el pais if not paisencontrado: # Al no haber econtrado el pais, hemos de añadir al diccionario la nueva CLAVE:VALOR # Añadimos a lista ciudades la ciudad introducida (solo tendrá ese valor, porque la lista estaba vacía) Listaciudades.append(ciudad) # Añadimos, ahora sí, el nuevo pais (CLAVE) con su ciudad en forma de lista (VALOR) al diccionario ciudades[pais] = Listaciudades # Imprimimos el diccionario en pantalla print(ciudades)
26 enero, 2023 a las 6:05 pm #21870
Pablo AparicioParticipanteYo hice esto, también sin usar el setdefault(), de lo que aún tengo que tomar notas porque era algo totalmente nuevo.
print("Países y ciudades") #Sólo a modo de titular capitales= {} #Creo el diccionario llamado "capitales", aunque creo que debería haber elegido mejor el nombre pais="" #Inicio la variable "país" con una cadena vacía. while pais!="salir": #mientras "país" no sea "salir", y entra porque inicia como vacío pais = input("Introduce un país: ") #Se pedirá que se introduzca un país. if pais == "salir": #Si ese país es "salir" break "Se sale del bucle" ciudad = input("Introduce ciudad: ") #Si no se sale del bucle, continúa con el flujo de ejecución preguntando por una ciudad. if pais in capitales: #si el país introducido está en el diccionario "capitales" capitales[pais].append(ciudad) #A ese país se le añade un el valor con el nombre de la ciudad en forma de lista (eso hace append()). else: #Si el país introducido no está en "capitales". capitales[pais]=[ciudad] #Sencillamente se añade el país al diccionario. print(capitales) #Imprimir el diccionario "capitales"
Creo que está bien. No diré el tiempo que me tiré para conseguirlo porque no sé si es algo bueno o malo. O sí, más de 3 horas haciendo pruebas. Por eso me gustaría leer alguna opinión de alguien que pudiera decirme si está bien, si no o en qué se puede mejorar. Yo suelo cometer el error de que comparado con otros códigos, los míos suelen poder estar mejor optimizados. Además, en este caso, si lo primero que ponemos es “salir”, imprimirá las llaves del diccionario, aunque vacío.
Y también aprovecho este post para presentarme por aquí.
26 enero, 2023 a las 6:30 pm #21871
Pablo AparicioParticipanteComo no encuentro cómo editar, respondo con correcciones en las explicaciones del último condicional:
Es que si el país introducido está en el diccionario “capitales”, se añadirá a la lista de ciudades la ciudad introducida. Si es un país nuevo, creará una nueva “clave:valor”, y como “ciudad” está ahí entre corchetes, se añadirá la ciudad iniciando una lista para el valor del país introducido.
No sé si me explico bien. O quizá sea más fácil leerlo si la segunda parte la pongo en el “if” y la primera en el “else”. La idea es que si el país introducido es uno nuevo, añade al diccionario el país como clave y la ciudad como valor, un valor que es una lista porque va entre corchetes. Como los valores (ciudades) son una lista, los nuevos valores se pueden añadir a las mismas con append().
-
AutorEntradas
- Debes estar registrado para responder a este debate.