如何精简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))
优化说明
- 替换了原代码中的
str参数名(str是Python内置类型,用作变量名会覆盖内置功能,引发潜在问题) - 合并了冗余的条件判断,减少了中间变量的赋值操作
- 简化了代码结构,让逻辑更直观易读
原代码的核心逻辑没问题,但通过上述调整可以让代码更简洁、健壮。
内容的提问来源于stack exchange,提问作者Woeful Forest
相关产品推荐
相关产品推荐

