114 lines
3.5 KiB
Python
114 lines
3.5 KiB
Python
"""
|
|
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() |