Created
August 23, 2016 14:08
-
-
Save giggio/f6e78cd9a458ab0370730deccd30ebb4 to your computer and use it in GitHub Desktop.
Dojo de Python na Lambda3 (http://dojopuzzles.com/problemas/exibe/contando-as-letras-dos-numeros/)
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
unidades = ['um', 'dois', 'tres', 'quatro', 'cinco', 'seis', 'sete', 'oito'] | |
dezenas = ['dez', 'vinte'] | |
centenas = ['cento'] | |
class Letras: | |
def __init__(self, numero): | |
if numero > 100: | |
centena = int(numero / 100) | |
dezena = int((numero - (centena * 100))/ 10) | |
unidade = numero - (centena * 100) - (dezena * 10) | |
letras_centena = self.conta(centena, centenas, e=True) | |
letras_dezena = self.conta(dezena,dezenas, e=True) | |
letras_unidade = self.conta(unidade,unidades) | |
if dezena > 0: | |
self.letras = letras_centena + letras_dezena + letras_unidade | |
else: | |
self.letras = letras_centena + letras_unidade | |
elif numero == 100: | |
self.letras = 3 | |
elif numero > 20: | |
dezena = int(numero / 10) | |
unidade = numero % 10 | |
self.letras = self.conta(dezena,dezenas, e=True) + self.conta(unidade,unidades) | |
else: | |
self.letras = len(unidades[numero - 1]) | |
def conta(self, numero, lista, e=None): | |
somae = 1 if e else 0 | |
return len(lista[numero-1]) + somae |
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
"""Se os números de 1 a 5 fossem escritos em palavras: um, dois, três, quatro, | |
cinco, então teríamos utilizado 2 + 4 + 4 + 6 + 5 = 21 letras no total. Se | |
todos os números de 1 até 1000 fossem escritos em palavras, quantas letras nós | |
teríamos utilizado?""" | |
import unittest | |
from letras import Letras | |
class LetrasTest(unittest.TestCase): | |
def testUm(self): | |
letra_um = Letras(1) | |
self.assertEqual(letra_um.letras, 2) | |
def testDois(self): | |
letra = Letras(2) | |
self.assertEqual(letra.letras, 4) | |
def testTres(self): | |
letra = Letras(3) | |
self.assertEqual(letra.letras, 4) | |
def testQuatro(self): | |
letra = Letras(4) | |
self.assertEqual(letra.letras, 6) | |
def testCinco(self): | |
letra = Letras(5) | |
self.assertEqual(letra.letras, 5) | |
def testSeis(self): | |
letra = Letras(6) | |
self.assertEqual(letra.letras, 4) | |
def testSete(self): | |
letra = Letras(7) | |
self.assertEqual(letra.letras, 4) | |
def testOito(self): | |
letra = Letras(8) | |
self.assertEqual(letra.letras, 4) | |
def testVinteEUm(self): | |
letra = Letras(21) | |
self.assertEqual(letra.letras, 8) | |
def testVinteEDois(self): | |
letra = Letras(22) | |
self.assertEqual(letra.letras, 10) | |
def testVinteETres(self): | |
letra = Letras(23) | |
self.assertEqual(letra.letras, 10) | |
def testCem(self): | |
letra = Letras(100) | |
self.assertEqual(letra.letras, 3) | |
def testCentoEUm(self): | |
letra = Letras(101) | |
self.assertEqual(letra.letras, 8) | |
def testCentoEVinteEUm(self): | |
letra = Letras(121) | |
self.assertEqual(letra.letras, len("centoevinteeum")) | |
if __name__ == '__main__': | |
unittest.main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment