Apuntes_Python/01_curso/Modulo_3/3-4f_activ_nros_romanos.py

114 lines
3.5 KiB
Python
Raw Normal View History

2022-12-24 22:41:20 -03:00
"""
Aplicar técnica de programación Test Driven Development (TDD)
Implementar de manera iterativa e incremental la conversión de números enteros a números romanos*.
- Se debe poder convertir cualquier número entero desde el 1 hasta el 1000.
- Escribe el código y los tests en un archivo de Python.
*referencia con la relación de los números y los símbolos:
Número entero Número romano
1 I
5 V
10 X
50 L
100 C
500 D
1000 M
"""
import unittest
class NumeroRomano(object):
valores = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
simbolos = ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I']
def conv_a_romano(self, n):
restante = n
nro_romano = ''
for i in range(len(self.valores)):
nro_romano, restante = self.agregar_nro_romano(restante, self.valores[i], self.simbolos[i], nro_romano)
return nro_romano
def agregar_nro_romano(self, n, numero, valor_romano, num_romano):
restante = n
while restante >= numero:
num_romano = num_romano + valor_romano
restante -= numero
return num_romano, restante
class NumeroRomanoTest(unittest.TestCase):
def setUp(self):
self.nro_romano = NumeroRomano()
def test_1_romano(self):
nro_romano = self.nro_romano.conv_a_romano(1)
self.assertEqual('I', nro_romano)
def test_2_romano(self):
nro_romano = self.nro_romano.conv_a_romano(2)
self.assertEqual('II', nro_romano)
def test_3_romano(self):
nro_romano = self.nro_romano.conv_a_romano(3)
self.assertEqual('III', nro_romano)
def test_4_romano(self):
nro_romano = self.nro_romano.conv_a_romano(4)
self.assertEqual('IV', nro_romano)
def test_5_romano(self):
nro_romano = self.nro_romano.conv_a_romano(5)
self.assertEqual('V', nro_romano)
def test_9_romano(self):
nro_romano = self.nro_romano.conv_a_romano(9)
self.assertEqual('IX', nro_romano)
def test_10_romano(self):
nro_romano = self.nro_romano.conv_a_romano(10)
self.assertEqual('X', nro_romano)
def test_40_romano(self):
nro_romano = self.nro_romano.conv_a_romano(40)
self.assertEqual('XL', nro_romano)
def test_50_romano(self):
nro_romano = self.nro_romano.conv_a_romano(50)
self.assertEqual('L', nro_romano)
def test_90_romano(self):
nro_romano = self.nro_romano.conv_a_romano(90)
self.assertEqual('XC', nro_romano)
def test_100_romano(self):
nro_romano = self.nro_romano.conv_a_romano(100)
self.assertEqual('C', nro_romano)
def test_400_romano(self):
nro_romano = self.nro_romano.conv_a_romano(400)
self.assertEqual('CD', nro_romano)
def test_500_romano(self):
nro_romano = self.nro_romano.conv_a_romano(500)
self.assertEqual('D', nro_romano)
def test_900_romano(self):
nro_romano = self.nro_romano.conv_a_romano(900)
self.assertEqual('CM', nro_romano)
def test_989_romano(self):
nro_romano = self.nro_romano.conv_a_romano(989)
self.assertEqual('CMLXXXIX', nro_romano)
def test_1000_romano(self):
nro_romano = self.nro_romano.conv_a_romano(1000)
self.assertEqual('M', nro_romano)
if __name__ == '__main__':
unittest.main()