Siempre agradecido Ernesto por este curso y estos proyectos finales. En mi caso, la lógica de la programación del algoritmo, se me hizo algo más complicada que el ejercicio anterior. No se me ocurrió invertir el número romano introducido, y lo que hago es ir sumando los valores y, si llegamos a una letra con valor mayor que el anterior, resto lo sumado anteriormente por dos para convertirlo a resta :-) Añadí un conjunto con las letras válidas para hacer validación con lo que aprendimos de subconjuntos. Mi código quedó así... equivalencias = {"M": 1000, "D": 500, "C": 100, "L": 50, "X": 10, "V": 5, "I": 1} romano_valido = {"M", "D", "C", "L", "X", "V", "I"} try: romano = input("Ingresa un número romano para convertirlo a entero: ").upper() entero = equivalencias[romano[0]] if set(romano) = equivalencias[romano[posicion+1]] : entero += equivalencias[romano[posicion+1]] else: entero = entero - equivalencias[romano[posicion]]*2 + equivalencias[romano[posicion+1]] print("Resultado:", entero) else: print("El número ingresado debe ser un número romano.") except Exception as e: print("Ingresa un número romano válido:", e)
@juan_ortega236 ай бұрын
Aguante La Geekipedia De Ernesto, el mejor curso de Python en youtube. Saludos desde Argentina, gracias profe
@polar2678 Жыл бұрын
Por suerte este es un problema de Leetcode que ya había hecho hace tiempo jaja, aquí mi solución: . . . # Python 3.12.0 class Solution(object): def romanToInt(self, s: str): new_num = 0 units = { "I": 1, "V": 5, "IV": 4, "X": 10, "IX": 9, "L": 50, "XL": 40, "C": 100, "XC": 90, "D": 500, "CD": 400, "M": 1000, "CM": 900 } while s: for k, v in reversed(units.items()): if s.startswith(k): new_num += v s = s[len(k):] break return new_num print("Resultado:", Solution().romanToInt(input("Escribe un número romano para convertirlo a entero: ").upper()))
@alejandrotorresvalverde4096 Жыл бұрын
Muchas gracias
@Nero011233 ай бұрын
Lo admito, me quedo grande el ejercicio, pero muy bueno para trabajar y entrenar la logica 😅
@fernandoarroyo893511 ай бұрын
Comparto el programa más simplificado al anterior. Me divierte resolver estos acertijos. Saludos. Vamos ver como lo resolvió nuestro profe. Saludos compañeros. print(" PROGRAMA CONVERTIDOR DE NÚMEROS ROMANOS A DECIMALES ".center(100,"*")) print(" Ingresa un número Romano para hacer su conversión a número decimal") total = 0 num_correcto = "" num_usuario = input("¿Cúal es el numero Romano que deseas convertir?: ").upper() romanos = {0:{"MMM":3000, "MM":2000, "M":1000 }, 1:{"CM":900, "DCCC":800, "DCC":700, "DC":600, "D":500, "CD":400, "CCC":300, "CC":200, "C":100 }, 2:{"XC":90, "LXXX":80, "LXX":70, "LX":60, "L":50, "XL":40, "XXX":30, "XX":20, "X":10 }, 3:{"IX":9, "VIII":8, "VII":7, "VI":6, "V":5, "IV":4, "III":3, "II":2, "I":1, } } try: for cont in romanos: for key, value in romanos[cont].items(): if num_usuario.startswith(key): total += value num_usuario = num_usuario[len(key):] num_correcto += key break if len(num_usuario) == 0: print(f"El número Romano {num_correcto} en número decimal es: {total}") else: print("El dato proporcinado no es un número Romano, favor de verificar") except ValueError as ve: print("El dato proporcinado no es un número Romano, favor de verificar") except Exception as e: print(f"Estamos trabajando para resolver este error, {e}")
@andresfcp2 ай бұрын
-----> GRACIAS ERNESTO
@Rokko- Жыл бұрын
Si ingresas iiv te devuelve 5, habría que corregirlo.
@sofyhernandez2652 Жыл бұрын
Qué número romano es ese "iiv"? :/
@Rokko- Жыл бұрын
@@sofyhernandez2652 justamente ninguno, por lo tanto debió rechazarlo el mismo programa
@Juststudy-cc4ow10 ай бұрын
Tarde casi 7 horas pero ahora tengo un convertidor de numeros romanos que te da un mensaje de error cada vez que quieras colocar algo que no sea un numero romano y tambien si quieres colocar un numero romano invalido algo asi como XXXX y ademas convierte en mayusculas el input en minusculas aqui esta el codigo. resultado = 0 error = 0 ee_ = 0 print("Este programa convertiralos numeros romanos en numeros Actuales " "Pero solo aceptamos los numeros desde el 1 hasta el 3999") print() a = input("Escribe el numero que quieras convertir: ") a = a.upper() m = a.count("M") em = a.count("CM") d = a.count("D") ed = a.count("CD") c = a.count("C") ec = a.count("XC") el = a.count("L") eu = a.count("XL") x = a.count("X") xi = a.count("IX") v = a.count("V") uv = a.count("IV") u = a.count("I") for caracter in a: ee_ += 1 if ee_ > 1: ee_ -= em ee_ -= m ee_ -= d ee_ -= ed ee_ -= c ee_ -= ec ee_ -= el ee_ -= eu ee_ -= x ee_ -= xi ee_ -= uv ee_ -= u error += ee_ if em == 1: c -= 1 x -= 1 if em == 1: m -= 1 if c == 1 and m == 1: c -= 1 if ed == 1 and d == 1: d -= 1 if ed == 1 and c == 1: c -= 1 if ec == 1: c -= 1 x =- 1 if el == 1 and eu == 1: el -= 1 if eu == 1 and x == 1: x -= 1 if x == 1 and xi == 1: x -= 1 if xi == 1: u -= 1 if x == 1 and ec == 1: x -=1 if u == 1 and uv == 1: u -= 1 if v == 1 and uv == 1: v -=1 s = 0 try: if m > 0 and m < 4: s = 0 while s < m: s += 1 resultado += 1000 if em == 1: resultado += 900 if ed == 1: resultado += 400 if d == 1: resultado += 500 if c > 0 and c < 4: s = 0 while s < c: s += 1 resultado += 100 if ec == 1: resultado += 90 if el == 1: resultado += 50 if eu == 1: resultado += 40 if x > 0 and x < 4: s = 0 while s < x: s += 1 resultado += 10 if xi == 1: resultado += 9 if v == 1: resultado += 5 if uv == 1: resultado += 4 if u > 0 and u < 4: s = 0 while s < u: s += 1 resultado += 1 if eu > 1 or el > 1 or uv > 1 or xi > 1 or ec > 1 or d > 1 or ed > 1 or em > 1: error += 1 elif u > 3 or x > 3 or c > 3 or m > 3: error += 1 except ValueError: print("Lo sentimos solo se permiten valores tipo String") if error > 0: print("Lo sentimos a sucedido un error, aparentemente no has ingresado un numero romano valido") elif error == 0: print(resultado)
@Juststudy-cc4ow10 ай бұрын
el codigo que quedo cuando lo empeze a reducir resultado = 0 error = 0 print("Este programa convertirá los números romanos en números actuales " "Pero solo aceptamos los números desde el 1 hasta el 3999") print() try: a = input("Escribe el número que quieras convertir: ").upper() valores_romanos = {'M': 1000, 'CM': 900, 'D': 500, 'CD': 400, 'C': 100, 'XC': 90, 'L': 50, 'XL': 40, 'X': 10, 'IX': 9, 'V': 5, 'IV': 4, 'I': 1} for simbolo, valor in valores_romanos.items(): cantidad = a.count(simbolo) resultado += cantidad * valor a = a.replace(simbolo, "") if a: error += 1 elif resultado < 1 or resultado > 3999: error += 1 except ValueError: print("Lo sentimos solo se permiten valores tipo String") if error > 0: print("Lo sentimos ha ocurrido un error, parece que no has ingresado un número romano válido.") else: print(resultado)
@Camach-o11 ай бұрын
Aquí mi solución. Curiosamente se me hizo más fácil que el de convertir un entero a romano xd numero = input("Ingresa un número romano para convertirlo a entero: ").upper() entero = 0 temp = 0 for x in numero: if x == 'I': n = 1 elif x == 'V': n = 5 elif x == 'X': n = 10 elif x == 'L': n = 50 elif x == 'C': n = 100 elif x == 'D': n = 500 elif x == 'M': n = 1000 if temp < n: entero -= temp n = n - temp entero += n else: entero += n temp = n print(entero)