Python实现数字转罗马数字多输入仅处理最后一个问题求助
问题原因
你的转换逻辑完全写在了输入循环的外部,所以只会在所有输入完成后,用最后一次读取的n值执行转换,自然只能得到最后一个数字的转换结果。另外你代码里还有个笔误:罗马数字400对应的是CD,不是XD,需要修正。
修改方案
把转换逻辑移动到输入循环内部,每次读取到有效数字后立刻执行转换输出即可,修改后完整代码如下:
t = int(input("repeat : ")) # 映射表和转换顺序移到循环外,避免重复创建 romnumber = {1: 'I', 4: 'IV', 5: 'V', 9: 'IX', 10: 'X', 40: 'XL', 50: 'L', 90: 'XC', 100: 'C', 400: 'CD', 500: 'D', 900: 'CM', 1000: 'M'} print_order = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1] for i in range(t): try: n = int(input("")) except ValueError: print("incorrect input") else: temp = n # 转换逻辑移到输入循环内部 for x in print_order: if temp != 0: quotient = temp // x if quotient != 0: for y in range(quotient): print(romnumber[x], end="") temp = temp % x # 单次转换完成后换行 print()
主要调整点
- 罗马数字映射表、转换顺序表移到循环外,避免重复创建浪费性能
- 转换逻辑整体移入输入循环内部,每拿到一个有效数字就立即转换输出
- 修正了400对应的罗马数字笔误
- 每次转换完成后增加换行,符合预期输出格式
- 用临时变量
temp存储当前要转换的数字,保证每次转换的独立性
内容的提问来源于stack exchange,提问作者Ali Ebadi
相关产品推荐
相关产品推荐

