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

如何精简Python实现的罗马数字转整数程序?

罗马数字转整数代码精简方案

你的代码逻辑是正确的,确实有精简优化的空间,以下是几种更简洁的实现方式,同时修正了原代码中使用内置函数名str作为参数名的潜在问题:

方案一:优先匹配两位组合(最直观的精简)

直接利用字典中已有的两位罗马数字键,优先检查当前位置开始的两位是否在字典中,减少条件嵌套:

roman_map = {'I':1,'IV':4,'V':5,'IX':9,'X':10,'XL':40,'L':50,'XC':90,'C':100,'CD':400,'D':500,'CM':900,'M':1000}
def roman_to_int(roman_str):
    result = 0
    i = 0
    n = len(roman_str)
    while i < n:
        # 先判断是否存在两位的罗马数字组合
        if i + 1 < n and roman_str[i:i+2] in roman_map:
            result += roman_map[roman_str[i:i+2]]
            i += 2
        else:
            result += roman_map[roman_str[i]]
            i += 1
    return result

x = input("Please enter a Roman numeral: ")
print(roman_to_int(x))

方案二:保留原逻辑但简化结构

如果想保留原有的"比较前后值大小"的逻辑,可以简化变量赋值和条件判断:

roman_map = {'I':1,'IV':4,'V':5,'IX':9,'X':10,'XL':40,'L':50,'XC':90,'C':100,'CD':400,'D':500,'CM':900,'M':1000}
def roman_to_int(roman_str):
    result = 0
    i = 0
    n = len(roman_str)
    while i < n:
        current_val = roman_map[roman_str[i]]
        # 仅当不是最后一位且当前值小于下一位时,处理减法逻辑
        if i < n - 1 and current_val < roman_map[roman_str[i+1]]:
            result += roman_map[roman_str[i+1]] - current_val
            i += 2
        else:
            result += current_val
            i += 1
    return result

x = input("Please enter a Roman numeral: ")
print(roman_to_int(x))

优化说明

  1. 替换了原代码中的str参数名(str是Python内置类型,用作变量名会覆盖内置功能,引发潜在问题)
  2. 合并了冗余的条件判断,减少了中间变量的赋值操作
  3. 简化了代码结构,让逻辑更直观易读

原代码的核心逻辑没问题,但通过上述调整可以让代码更简洁、健壮。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:25:29