Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- """
- Problema:
- Transforma número decimal para romano e vice-versa.
- I=1, V=5, X=10, L=50, C=100, D=500, M=1000
- Exemplo: 2010 = MMX
- Algarismos iguais até três repetições é somado o valor. Ex.: III=3
- Algarismo menores ao lado esquerdo de um maior é subtraído o valor do maior. Ex.: XL = 40
- O código aceitará como entrada até 3000.
- """
- """
- Solução do Rogênio
- """
- import unittest
- def romano(n):
- letras = {0: '', 1: 'I', 5: 'V', 10: 'X', 50: 'L', 100: 'C', 500: 'D', 1000: 'M'}
- num = {0: 0, 1: 1, 2: 5, 3: 10, 4: 50, 5: 100, 6: 500, 7: 1000}
- numero_romano = ''
- for i in range(7,0,-1):
- indice = n / num[i]
- if indice != 0:
- m = str(n)
- if int(m[0]) == 4:
- numero_romano += letras[num[i]] + letras[num[i+1]]
- n -= num[i] * indice
- elif int(m[0]) == 9:
- numero_romano += letras[num[i-1]] + letras[num[i+1]]
- n -= int('9' + ((len(m)-1) * '0'))
- else:
- numero_romano += indice * letras[num[i]]
- n -= num[i] * indice
- return numero_romano
- """
- Testes
- """
- class testa_romano(unittest.TestCase):
- def teste_um(self):
- self.assertEqual(romano(1),"I")
- def teste_dois(self):
- self.assertEqual(romano(2),"II")
- def teste_tres(self):
- self.assertEqual(romano(3),"III")
- def teste_quatro(self):
- self.assertEqual(romano(4),"IV")
- def teste_cinco(self):
- self.assertEqual(romano(5),"V")
- def teste_seis(self):
- self.assertEqual(romano(6),"VI")
- def teste_sete(self):
- self.assertEqual(romano(7),"VII")
- def teste_nove(self):
- self.assertEqual(romano(9),"IX")
- def teste_dez(self):
- self.assertEqual(romano(10),"X")
- def teste_onze(self):
- self.assertEqual(romano(11),"XI")
- def teste_quatorze(self):
- self.assertEqual(romano(14),"XIV")
- def teste_dezenove(self):
- self.assertEqual(romano(19),"XIX")
- def teste_vinte(self):
- self.assertEqual(romano(20),"XX")
- def teste_vinteeum(self):
- self.assertEqual(romano(21),"XXI")
- def teste_vinteequatro(self):
- self.assertEqual(romano(24),"XXIV")
- def teste_vinte(self):
- self.assertEqual(romano(30),"XXX")
- def teste_quarenta(self):
- self.assertEqual(romano(40),"XL")
- def teste_quarenta_quatro(self):
- self.assertEqual(romano(44),"XLIV")
- def teste_quarenta_quatro(self):
- self.assertEqual(romano(48),"XLVIII")
- def teste_quarenta_nove(self):
- self.assertEqual(romano(49),"XLIX")
- def teste_cinquenta(self):
- self.assertEqual(romano(50),"L")
- def teste_cinquenta_quatro(self):
- self.assertEqual(romano(54),"LIV")
- def teste_cinquenta_oito(self):
- self.assertEqual(romano(58),"LVIII")
- def teste_cinquenta_nove(self):
- self.assertEqual(romano(59),"LIX")
- def teste_sessenta(self):
- self.assertEqual(romano(60),"LX")
- def teste_sessenta_quatro(self):
- self.assertEqual(romano(64),"LXIV")
- def teste_sessenta_oito(self):
- self.assertEqual(romano(68),"LXVIII")
- def teste_sessenta_nove(self):
- self.assertEqual(romano(69),"LXIX")
- def teste_setenta(self):
- self.assertEqual(romano(70),"LXX")
- def teste_oitenta(self):
- self.assertEqual(romano(80),"LXXX")
- def teste_noventa(self):
- self.assertEqual(romano(90),"XC")
- def teste_noventa_nove(self):
- self.assertEqual(romano(99),"XCIX")
- def teste_cem(self):
- self.assertEqual(romano(100),"C")
- def teste_duzentos(self):
- self.assertEqual(romano(200),"CC")
- def teste_trezentos(self):
- self.assertEqual(romano(300),"CCC")
- def teste_quinhentos(self):
- self.assertEqual(romano(500),"D")
- def teste_seiscentos(self):
- self.assertEqual(romano(600),"DC")
- def teste_seiscentos_quarenta_nove(self):
- self.assertEqual(romano(649),"DCXLIX")
- def teste_novecentos(self):
- self.assertEqual(romano(900),"CM")
- def teste_novecentos_noventa_nove(self):
- self.assertEqual(romano(999),"CMXCIX")
- def teste_mil(self):
- self.assertEqual(romano(1000),"M")
- def teste_mil_novecentos_noventa_nove(self):
- self.assertEqual(romano(1999),"MCMXCIX")
- def teste_dois_mil(self):
- self.assertEqual(romano(2000),"MM")
- def teste_tres_mil(self):
- self.assertEqual(romano(3000),"MMM")
- def teste_tres_mil_quinhentos_noventa(self):
- self.assertEqual(romano(3590),"MMMDXC")
- def teste_tres_mil_novecentos_noventa_nove(self):
- self.assertEqual(romano(3999),"MMMCMXCIX")
- unittest.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement