You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:36:08