Created
October 2, 2010 14:39
-
-
Save fsouza/607689 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 ', '')) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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