Reto: Diccionarios
Dado un número del 1 al 12, mostrar el mes correspondiente y el número de días que tiene. Trabajar con diccionarios.
Método 1
Creamos el diccionario
d
en el que la clave son los números del 1 al 12 y el valor son los días que tiene cada mes. Consideramos que febrero siempre tiene 28 días para simplificar. Preguntamos al usuario por el més que quiere, que ha de ser un número entre 1 y 12. Creamos una tupla denominada
mes
con los meses del año. Observe que es una tupla porque hemos usado paréntesis en su creación. Si hubiéramos usado corchetes [] se trataría de una lista y el código también funcionaría bien. Primero imprimimos el mes consultando la tupla. Finalmente imprimimos el número de días que contiene ese mes consultando el diccionario.
d= {'1':31, '2':28, '3':31, '4':30, '5':31, '6':30, '7':31, '8':31, '9':30, '10':31, '11':30, '12':31}
x=input('¿Qué mes quiere?')
mes=('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')
print(mes[int(x)-1])
print(d.get(x))
Método 2
Creamos el diccionario
d
donde la clave es el mes y el valor es el número de días que tiene ese mes. Creamos la lista
mes
con los meses del año en formato texto, a tres dígitos. Nos metemos en un bucle
while True
donde preguntamos al usuario por
n
que es el número de meses. Si
n
está en el rango 1 a 12 detendremos el bucle y sino seguiremos preguntando. Calculamos
m
consultando la lista
mes
. Recuerde que las listas comienzan por cero, este es el motivo por el que hemos restado 1 al proporcionar el índice de la lista. Finalmente imprimimos
n
,
m
y el número de días que contiene el mes haciendo una consulta al diccionario.
d={'Jan':31,'Feb':28,'Mar':31,'Apr':30,'May':31,'Jun':30,'Jul':31,'Aug':31,'Sep':30,'Oct':31,'Nov':30,'Dec':31}
mes=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
while True:
n=int(input('Indique un mes con un número del 1 al 12:'))
if n in range(1,13):
break
m=mes[n-1]
print('El mes',n,'es', m,'y tiene',d[m],'días.')
Método 3
Generamos un número aleatorio entre 1 y 12. Definimos dos diccionarios donde en ambos la clave es un número entero entre 1 y 12. El primer diccionario contiene el nombre del mes y el segundo los días de ese mes. Finalmente imprimimos el valor numérico generado de forma aleatoria
n
, consultamos el diccionario primero para obtener el mes y el segundo para obtener el número de días que contiene.
import random
random.seed()
n=random.randint(1,12)
a={1:'Jan',2:'Feb',3:'Mar',4:'Apr',5:'May',6:'Jun',7:'Jul',8:'Aug',9:'Sep',10:'Oct',11:'Nov',12:'Dec'}
b={1:31,2:28,3:31,4:30,5:31,6:30,7:31,8:31,9:30,10:31,11:30,12:31}
print(' mes:',n,'-->',a[n],'\n','días =',b[n])
Método 4
Creamos un único diccionario cuyas claves son los números del 1 al 12 y cuyo valor es una lista de dos elementos, el primero es el mes y el segundo el número de días que tiene. También se podría haber usado una tupla en lugar de una lista. Si se usan corchetes se trata de una lista, y si usamos paréntesis se trata de una tupla.
Con un bucle
for
recorremos todos los elementos del diccionario y vamos llamando a los elementos dos elementos de la lista que contienen.
d={1:['Jan',31],2:['Feb',28],3:['Mar',31],4:['Apr',30],5:['May',31],6:['Jun',30],7:['Jul',31],8:['Aug',31],9:['Sep',30],10:['Oct',31],11:['Nov',30],12:['Dec',31]}
for i in range(1,13):
print(i,':',d[i][0],d[i][1])
Método 5
Definimos la lista
mes
y la lista
dias
. También creamos la lista
num
generándola con
range
. Vamos a crear dos diccionarios
d1
y
d2
usando
zip
y
dict
. Lo que hace
zip
es unir dos iterables y
dict
convierte el resultado en un diccionario.
Con un bucle
for
recorremos todos los números de 1 al 12 y vamos llamando a los elementos de los dos diccionarios.
mes=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
dias=[31,28,31,30,31,30,31,31,30,31,30,31]
num=list(range(1,13))
d1=dict(zip(num,mes))
d2=dict(zip(num,dias))
for i in range(1,13):
print(i,d1[i],d2[i])
Método 6
Este método es similar al anterior si bien usa un único diccionario. La función
zip
agrupa dos o más iterables, y los convierte en una tupla. Aquí lo usamos dos veces, la primera permite crear una tupla con el mes y los días que tiene ese mes. La segunda vez que se usa la función
zip
agrupa un número correlativo entre 1 y 12 con la tupla anterior y aprovechamos a convertir el resultado en un diccionario usando
dict
. De esta forma hemos obtenido un único diccionario denominado
d
que mostramos seguidamente.
mes=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
dias=[31,28,31,30,31,30,31,31,30,31,30,31]
num=list(range(1,13))
tupla=zip(mes,dias)
d=dict(zip(num,tupla))
for i in range(1,13):
texto=''
if i<10: --="" i="" str="" texto=""> '+d[i][0]+' '+str(d[i][1])
print(texto)10:>
Método 7
En este método usamos la función incluida en Python denominada
enumerate
que lo que hace es añadir a un objeto iterable una sucesión de números que comienza por cero. Si queremos que comience por 1 tenermos que añadir
start=1
.
mes=['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
dias=[31,28,31,30,31,30,31,31,30,31,30,31]
d=dict(enumerate(zip(mes,dias), start=1))
for i in d:
print(i,d[i])