Skip to content

Instantly share code, notes, and snippets.

@fsouza
Created October 2, 2010 14:39
Show Gist options
  • Save fsouza/607689 to your computer and use it in GitHub Desktop.
Save fsouza/607689 to your computer and use it in GitHub Desktop.
def escreve_unidade(numero):
unidades = ('', 'um', 'dois', 'tres', 'quatro', 'cinco', 'seis', 'sete', 'oito', 'nove')
return unidades[numero]
def escreve_dezena(numero):
retorno = ''
valor = numero / 10
dezenas10 = {10 :'dez', 11:'onze', 12:'doze', 13:'treze', 14:'quatorze', 15:'quinze', 16:'dezesseis', 17:'dezessete', 18:'dezoito', 19:'dezenove'}
dezenas = {2:'vinte', 3:'trinta', 4:'quarenta', 5:'cinquenta', 6:'sessenta', 7:'setenta', 8:'oitenta', 9:'noventa'}
resto = numero % 10
if valor > 1:
retorno += dezenas[valor]
if resto > 0:
retorno += ' e '
elif valor == 1:
retorno += dezenas10[numero]
if resto > 0 and valor != 1:
retorno += escreve_unidade(resto)
return retorno
def escreve_centena(numero):
retorno = ''
valor = numero/100
centenas = {1:'cento', 2:'duzentos', 3:'trezentos', 4:'quatrocentos',5:'quinhentos',6:'seiscentos',7:'setecentos',8:'oitocentos',9:'novecentos'}
resto = numero % 100
if valor > 0:
if valor == 1 and resto == 0:
return 'cem'
retorno += centenas[valor]
if resto > 0:
retorno += ' e '
retorno += escreve_dezena(resto)
return retorno
def escreve_numero(numero):
if numero == 1000:
return 'mil'
elif numero == 0:
return 'zero'
return escreve_centena(numero)
def conta_nome(numero):
return len(escreve_numero(numero).replace(' e ', ''))
import unittest
from nose.tools import assert_equals
from escreve_numero import escreve_numero, conta_nome
class TestEscreverNumero(unittest.TestCase):
def test_escreve_um_quando_informa_1(self):
"Deveria escrever \"um\" quando a entrada for 1"
assert_equals(escreve_numero(1), 'um')
def test_escreve_dois_quando_informa_2(self):
"Deveria escrever \"dois\" quando a entrada for 2"
assert_equals(escreve_numero(2), 'dois')
def test_escreve_nove_quando_informa_9(self):
"Deveria escrever \"nove\" quando a entrada for 9"
assert_equals(escreve_numero(9), 'nove')
def test_escreve_dez_quando_informa_10(self):
"Deveria escrever \"dez\" quando a entrada for 10"
assert_equals(escreve_numero(10), 'dez')
def test_escreve_vinte_quando_informa_20(self):
"Deveria escrever \"vinte\" quando a entrada for 20"
assert_equals(escreve_numero(20), 'vinte')
def test_escreve_duzentos_quando_informa_200(self):
"Deveria escrever \"Duzentos\" quando a entrada for 200"
assert_equals(escreve_numero(200), 'duzentos')
def test_escreve_duzentos_e_cinco_quando_informa_205(self):
"Deveria escrever \"Duzentos e cinco\" quando a entrada for 205"
assert_equals(escreve_numero(205), 'duzentos e cinco')
def test_escreve_vinte_e_cinco_quando_informa_25(self):
"Deveria escrever \"vinte e cinco\" quando a entrada for 25"
assert_equals(escreve_numero(25), 'vinte e cinco')
def test_ecreve_quinze_quando_informa_15(self):
"Deveria escrever \"quinze\" quando a entrada for 15"
assert_equals(escreve_numero(15), 'quinze')
def test_escreve_cento_e_cinco_quando_informa_105(self):
"Deveria escrever \"cento e cinco\" quando a entrada for 105"
assert_equals(escreve_numero(105), 'cento e cinco')
def test_escreve_cem_quando_informa_100(self):
"Deveria escrever \"cem\" quando a entrada for 100"
assert_equals(escreve_numero(100), 'cem')
def test_escreve_cento_e_vinte_e_cinco_quando_informa_125(self):
"Deveria escrever \"cento e vinte e cinco\" quando a entrada for 125"
assert_equals(escreve_numero(125), 'cento e vinte e cinco')
def test_escreve_mil_quando_informa_1000(self):
"Deveria escrever \"mil\" quando a entrada for 1000"
assert_equals(escreve_numero(1000), 'mil')
def test_escreve_zero_quando_informa_0(self):
"Deveria escrever \"zero\" quando a entrada for 0"
assert_equals(escreve_numero(0), 'zero')
def test_escreve_cento_e_dezenove_quando_informa_119(self):
"Deveria escrever \"cento e dezenove\" quando a entrada for 119"
assert_equals(escreve_numero(119), 'cento e dezenove')
def test_deveria_retornar_2_quando_informar_1(self):
"Deveria retornar 2 quando a entrada for 1"
assert_equals(conta_nome(1), 2)
def test_deveria_retornar_10_quando_informar_25(self):
"Deveria retornar 10 quando a entrada for 25"
assert_equals(conta_nome(25), 10)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment