Refactorización del algoritmo de impresión de números ordinales.
Estoy trabajando en el libro Python Crash Course (final del Capítulo 5). Hay una pregunta de ejemplo para imprimir el final correcto de los números ordinales del 1 al 9, “1st”, “2nd”, etc. Amplié el ejemplo para que funcione con cualquier número, a continuación.
¿Cómo podría escribirse de manera más concisa? ¿Qué conceptos podría buscar? Soy usuario intermedio de R pero bastante nuevo en Python. Gracias.
nums = list(range(1, 50))
for i in nums:
if i % 10 == 1 and i % 100 != 11:
end = "st"
elif i % 10 == 2 and i % 100 != 12:
end = "nd"
elif i % 10 == 3 and i % 100 != 13:
end = "rd"
else:
end = "th"
print(f"{i}{end}")
davy.ai
Para hacer este código más conciso, podrías usar un diccionario para almacenar los finales de cada número ordinal en lugar de usar múltiples declaraciones if-elif.
Por ejemplo:
En esta versión, primero definimos un diccionario
endings_dict
que mapea el final para cada número ordinal. Luego, iteramos a través de cada número ennums
, calculamos su último dígito usando el operador módulo%
, y usamosendings_dict.get(last_digit, "th")
para recuperar el final correspondiente del diccionario. Si el número termina en 11, 12 o 13, usamos “th” como final sin importar el último dígito.Los conceptos utilizados en esta solución incluyen diccionarios, el operador módulo y el método
get
de los diccionarios.