Advertisement
Guest User

romano2.py

a guest
Dec 1st, 2010
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.84 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. """
  4. Problema:
  5.  Transforma número decimal para romano e vice-versa.
  6.  I=1, V=5, X=10, L=50, C=100, D=500, M=1000
  7.  Exemplo: 2010 = MMX
  8.  Algarismos iguais até três repetições é somado o valor. Ex.: III=3
  9.  Algarismo menores ao lado esquerdo de um maior é subtraído o valor do maior. Ex.: XL = 40
  10.  O código aceitará como entrada até 3000.
  11. """
  12. """
  13. Solução do Rogênio
  14. """
  15.  
  16. import unittest
  17.  
  18. def romano(n):
  19.  
  20.     letras = {0: '', 1: 'I', 5: 'V', 10: 'X', 50: 'L', 100: 'C', 500: 'D', 1000: 'M'}
  21.     num = {0: 0, 1: 1, 2: 5, 3: 10, 4: 50, 5: 100, 6: 500, 7: 1000}
  22.  
  23.     numero_romano = ''
  24.  
  25.     for i in range(7,0,-1):
  26.         indice = n / num[i]
  27.  
  28.         if indice != 0:
  29.             m = str(n)
  30.             if int(m[0]) == 4:
  31.                 numero_romano += letras[num[i]] + letras[num[i+1]]
  32.                 n -= num[i] * indice
  33.             elif int(m[0]) == 9:
  34.                 numero_romano += letras[num[i-1]] + letras[num[i+1]]
  35.                 n -= int('9' +  ((len(m)-1) * '0'))
  36.             else:
  37.                 numero_romano += indice * letras[num[i]]
  38.                 n -= num[i] * indice
  39.  
  40.     return numero_romano
  41.  
  42.  
  43. """
  44. Testes
  45. """
  46. class testa_romano(unittest.TestCase):
  47.  
  48.     def teste_um(self):
  49.         self.assertEqual(romano(1),"I")
  50.  
  51.     def teste_dois(self):
  52.         self.assertEqual(romano(2),"II")
  53.  
  54.     def teste_tres(self):
  55.         self.assertEqual(romano(3),"III")
  56.  
  57.     def teste_quatro(self):
  58.         self.assertEqual(romano(4),"IV")
  59.  
  60.     def teste_cinco(self):
  61.         self.assertEqual(romano(5),"V")
  62.  
  63.     def teste_seis(self):
  64.         self.assertEqual(romano(6),"VI")
  65.  
  66.     def teste_sete(self):
  67.         self.assertEqual(romano(7),"VII")
  68.  
  69.     def teste_nove(self):
  70.         self.assertEqual(romano(9),"IX")
  71.  
  72.     def teste_dez(self):
  73.         self.assertEqual(romano(10),"X")
  74.  
  75.     def teste_onze(self):
  76.         self.assertEqual(romano(11),"XI")
  77.  
  78.     def teste_quatorze(self):
  79.         self.assertEqual(romano(14),"XIV")
  80.  
  81.     def teste_dezenove(self):
  82.         self.assertEqual(romano(19),"XIX")
  83.  
  84.     def teste_vinte(self):
  85.         self.assertEqual(romano(20),"XX")
  86.  
  87.     def teste_vinteeum(self):
  88.         self.assertEqual(romano(21),"XXI")
  89.  
  90.     def teste_vinteequatro(self):
  91.         self.assertEqual(romano(24),"XXIV")
  92.  
  93.     def teste_vinte(self):
  94.         self.assertEqual(romano(30),"XXX")
  95.  
  96.     def teste_quarenta(self):
  97.         self.assertEqual(romano(40),"XL")
  98.  
  99.     def teste_quarenta_quatro(self):
  100.         self.assertEqual(romano(44),"XLIV")
  101.  
  102.     def teste_quarenta_quatro(self):
  103.         self.assertEqual(romano(48),"XLVIII")
  104.  
  105.     def teste_quarenta_nove(self):
  106.         self.assertEqual(romano(49),"XLIX")
  107.  
  108.     def teste_cinquenta(self):
  109.         self.assertEqual(romano(50),"L")
  110.  
  111.     def teste_cinquenta_quatro(self):
  112.         self.assertEqual(romano(54),"LIV")
  113.  
  114.     def teste_cinquenta_oito(self):
  115.         self.assertEqual(romano(58),"LVIII")
  116.  
  117.     def teste_cinquenta_nove(self):
  118.         self.assertEqual(romano(59),"LIX")
  119.  
  120.     def teste_sessenta(self):
  121.         self.assertEqual(romano(60),"LX")
  122.  
  123.     def teste_sessenta_quatro(self):
  124.         self.assertEqual(romano(64),"LXIV")
  125.  
  126.     def teste_sessenta_oito(self):
  127.         self.assertEqual(romano(68),"LXVIII")
  128.  
  129.     def teste_sessenta_nove(self):
  130.         self.assertEqual(romano(69),"LXIX")
  131.  
  132.     def teste_setenta(self):
  133.         self.assertEqual(romano(70),"LXX")
  134.  
  135.     def teste_oitenta(self):
  136.         self.assertEqual(romano(80),"LXXX")
  137.  
  138.     def teste_noventa(self):
  139.         self.assertEqual(romano(90),"XC")
  140.  
  141.     def teste_noventa_nove(self):
  142.         self.assertEqual(romano(99),"XCIX")
  143.  
  144.     def teste_cem(self):
  145.         self.assertEqual(romano(100),"C")
  146.  
  147.     def teste_duzentos(self):
  148.         self.assertEqual(romano(200),"CC")
  149.  
  150.     def teste_trezentos(self):
  151.         self.assertEqual(romano(300),"CCC")
  152.  
  153.     def teste_quinhentos(self):
  154.         self.assertEqual(romano(500),"D")
  155.  
  156.     def teste_seiscentos(self):
  157.         self.assertEqual(romano(600),"DC")
  158.  
  159.     def teste_seiscentos_quarenta_nove(self):
  160.         self.assertEqual(romano(649),"DCXLIX")
  161.  
  162.     def teste_novecentos(self):
  163.         self.assertEqual(romano(900),"CM")
  164.  
  165.     def teste_novecentos_noventa_nove(self):
  166.         self.assertEqual(romano(999),"CMXCIX")
  167.  
  168.     def teste_mil(self):
  169.         self.assertEqual(romano(1000),"M")
  170.  
  171.     def teste_mil_novecentos_noventa_nove(self):
  172.         self.assertEqual(romano(1999),"MCMXCIX")
  173.  
  174.     def teste_dois_mil(self):
  175.         self.assertEqual(romano(2000),"MM")
  176.  
  177.     def teste_tres_mil(self):
  178.         self.assertEqual(romano(3000),"MMM")
  179.  
  180.     def teste_tres_mil_quinhentos_noventa(self):
  181.         self.assertEqual(romano(3590),"MMMDXC")
  182.  
  183.     def teste_tres_mil_novecentos_noventa_nove(self):
  184.         self.assertEqual(romano(3999),"MMMCMXCIX")
  185.  
  186. unittest.main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement