Ejercicio 4

Definir una función que reciba un número entero entre 0 y 999, y devuelva una cadena con la cantidad introducida en palabras. Por ejemplo, si se introduce 647 debe devolver la cadena "seiscientos cuarenta y siete".

La función debe cumplir los siguientes requisitos:

  • El único parámetro de entrada de la función es un número entero entre 0 y 999.
  • Deben usarse diccionarios para emparejar cada dígito con la palabra correspondiente para las unidades, decenas y centenas.
  • Debe devolver una cadena con la cantidad introducida en palabras.

Solución 1


In [1]:
def enuncia_cantidad(n):
    """
    Función que recibe una cantidad n y devuelve una cadena con la misma cantidad expresada en palabras.
    Parámetros:
        - n es un número entero entre 1 y 999.
    Devuelve:
        Una cadena con la cantidad n expresada en palabras.
    """
    # Diccionarios con las traducciones de número a palabra para las unidades, decenas y centenas.
    unidades = {0:'', 1:'uno', 2:'dos', 3:'tres', 4:'cuatro', 5:'cinco', 6:'seis', 7:'siete', 8:'ocho', 9:'nueve'}
    decenas = {0:'', 1:'diez', 2:'veinte', 3:'treinta', 4:'cuarenta', 5:'cincuenta', 6:'sesenta', 7:'setenta', 8:'ochenta', 9:'noventa'}
    centenas = {0:'', 1:'ciento', 2:'doscientos', 3:'trescientos', 4:'cuatrocientos', 5:'quinientos', 6:'seiscientos', 7:'setecientos', 8:'ochocientos', 9:'novencientos'}
    # Obtenemos las centenas mediante división entera por 100
    cen = n // 100 # Otra alternativa es cen = int(str(n)[0])
    # Obtenemos las decenas mediante división entera por 10 y luego tomando el resto de la división entera por 10
    dec = (n // 10) % 10 # Otra alternativa es dec = int(str(n)[1])
    # Obtenemos las unidades mediante el resto de la visión entera por 10.
    uni = n % 10 # Otra alternativa es cen = int(str(n)[2])
    # Definimos el nexo entre las decenas y las unidades
    if not uni:
        # Si no hay unidades no hay nexo.
        nexo = ''
    elif not dec:
        # Si hay unidades pero no decenas no hay nexo.
        nexo = ''
    else:
        # Si hay unidades y decenas el nexo es 'y'
        nexo = ' y '

    return centenas[cen] + decenas[dec] + nexo + unidades[uni]

# Varias llamadas a la función de prueba
print(647, ':', enuncia_cantidad(647))
print(30, ':', enuncia_cantidad(30))
print(6, ':', enuncia_cantidad(6))
print(100, ':', enuncia_cantidad(100))


647 : seiscientoscuarenta y siete
30 : treinta
6 : seis
100 : ciento

Solución 2


In [2]:
def enuncia_cantidad(n):
    """
    Función que recibe una cantidad n y devuelve una cadena con la misma cantidad expresada en palabras.
    Parámetros:
        - n es un número entero entre 1 y 999.
    Devuelve:
        Una cadena con la cantidad n expresada en palabras.
    """
    # Diccionarios con las traducciones de número a palabra para las unidades, decenas y centenas.
    unidades = {0:'', 1:'uno', 2:'dos', 3:'tres', 4:'cuatro', 5:'cinco', 6:'seis', 7:'siete', 8:'ocho', 9:'nueve'}
    decenas = {0:'', 1:'diez', 2:'veinte', 3:'treinta', 4:'cuarenta', 5:'cincuenta', 6:'sesenta', 7:'setenta', 8:'ochenta', 9:'noventa'}
    centenas = {0:'', 1:'ciento', 2:'doscientos', 3:'trescientos', 4:'cuatrocientos', 5:'quinientos', 6:'seiscientos', 7:'setecientos', 8:'ochocientos', 9:'novencientos'}
    # Obtenemos las centenas mediante división entera por 100
    cen = n // 100  # Otra alternativa es cen = int(str(n)[0])
    # Obtenemos las decenas mediante división entera por 10 y luego tomando el resto de la división entera por 10
    dec = (n // 10) % 10  # Otra alternativa es dec = int(str(n)[1])
    # Obtenemos las unidades mediante el resto de la visión entera por 10.
    uni = n % 10  # Otra alternativa es cen = int(str(n)[2])
    # Definimos el nexo entre las decenas y las unidades
    if not uni:
        # Si no hay unidades no hay nexo.
        nexo = ''
    elif not dec:
        # Si hay unidades pero no decenas no hay nexo.
        nexo = ''
    else:
        # Si hay unidades y decenas el nexo es 'y'
        nexo = ' y '

    return centenas[cen] + decenas[dec] + nexo + unidades[uni]

# Varias llamadas a la función de prueba
print(647, ':', enuncia_cantidad(647))
print(30, ':', enuncia_cantidad(30))
print(6, ':', enuncia_cantidad(6))
print(100, ':', enuncia_cantidad(100))


647 : seiscientoscuarenta y siete
30 : treinta
6 : seis
100 : ciento

In [ ]: