es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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}")
Tags:  , ,

Answer

  1. Avatar for 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:

    endings_dict = {1: "st", 2: "nd", 3: "rd"}
    
    for i in nums:
        last_digit = i % 10
        if i % 100 in [11, 12, 13]:
            end = "th"
        else:
            end = endings_dict.get(last_digit, "th")
        print(f"{i}{end}")
    

    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 en nums, calculamos su último dígito usando el operador módulo %, y usamos endings_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.

Comments are closed.