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

不使用def函数实现罗马数字转整数的新手编程问题求助

罗马数字转整数实现方案

核心计算规则

  • 罗马数字常规书写逻辑是数值大的符号在前,数值小的在后,该场景下直接累加每个符号对应的值即可
  • 遇到小数在前大数在后的特殊场景(比如IV=4、IX=9、XL=40等),用后位的大数减去前位的小数计算即可,或者直接优先匹配2字符的特殊组合计算

现有代码问题修正

你当前的代码存在几个可调整的点:

  1. 输出变量名拼写错误,你写的是ouput,正确拼写应为output
  2. 不要在for循环内部修改迭代变量i,for循环的i每次迭代都会自动被range生成的值覆盖,手动修改会导致逻辑混乱
  3. 你已经把2字符的特殊罗马数字存入字典,可优先判断当前位置+后续1位的组合是否在字典内,存在就直接加对应值同时跳过下一个字符,不存在就加当前单个字符的值

可直接运行的实现代码

版本1:按数值大小判断逻辑(无需存2字符特殊组合)

DictOfRomanNumerals = {"I":1, "V":5, "X":10,
                       "L":50, "C":100, "D":500,
                       "M":1000}
UserInput = input("Type in a Roman Numeral: ").strip().upper()
output = 0
i = 0
length = len(UserInput)
while i < length:
    # 先判断是否存在下一位,且当前字符值小于下一位字符值
    if i + 1 < length and DictOfRomanNumerals[UserInput[i]] < DictOfRomanNumerals[UserInput[i+1]]:
        # 特殊情况:后位减前位
        output += DictOfRomanNumerals[UserInput[i+1]] - DictOfRomanNumerals[UserInput[i]]
        # 步进2位,跳过已计算的后位
        i += 2
    else:
        # 正常情况直接累加当前值
        output += DictOfRomanNumerals[UserInput[i]]
        # 步进1位
        i += 1
print(output)

版本2:沿用你原有的带2字符组合的字典

DictOfRomanNumerals = {"I":1, "II":2, "III":3, "IV":4, "V":5, "IX":9, "X":10,
                       "XL":40, "L":50, "XC":90, "C":100, "CD":400, "D":500,
                       "CM":900, "M":1000}
UserInput = input("Type in a Roman Numeral: ").strip().upper()
output = 0
i = 0
length = len(UserInput)
while i < length:
    # 优先匹配2字符的特殊组合
    if i + 1 < length and UserInput[i:i+2] in DictOfRomanNumerals:
        output += DictOfRomanNumerals[UserInput[i:i+2]]
        i += 2
    else:
        output += DictOfRomanNumerals[UserInput[i]]
        i += 1
print(output)

代码说明

  • 全程未使用def函数,仅用到基础的循环、判断、字典操作,符合你当前的学习进度
  • 用while循环方便手动控制索引的步进长度,处理2字符组合时直接跳2位,不会出现重复计算问题
  • 增加了strip()和upper()处理逻辑,用户输入小写罗马数字或者前后带空格也不会报错

内容的提问来源于stack exchange,提问作者user17143760

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:57:03