小儿无赖 发表于 2023-8-17 16:04:36

这个罗马数字转十进制咋写啊,感觉卡住了思路

求助代码"""罗马数字转十进制"""
#罗马数字有I、V、X、L、C、D、M七种字符,分别表示数值1,5,10,50,100,500,10000
R2N = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}

#罗马字符转数字
def roman_num(x):
    r = 0
    n = len(x)
    for i, ch in enumerate(x):
      v = rc
      if i < n-1 and v < R2N]:
            r += R2N]
      else:
            r += R2N]
            r -= R2N]
            
    return r;
            
      
#程序主体
x = input("请输入一个罗马字符:")
v = roman_num(x)
print(f"转换后的结果是:{v}")
主要是中间循环体和判断中不好描述

isdkz 发表于 2023-8-17 16:05:04

问题出在循环体和判断条件上。在循环体中,你需要根据当前字符和下一个字符的大小关系来决定加还是减。在判断条件中,你需要判断当前字符是否是最后一个字符,以避免越界访问。

以下是修正后的代码:

# 罗马字符转数字
def roman_num(x):
    r = 0
    n = len(x)
    for i, ch in enumerate(x):
      v = R2N
      if i < n-1 and v < R2N]:
            r -= v
      else:
            r += v
    return r

# 程序主体
x = input("请输入一个罗马字符:")
v = roman_num(x)
print(f"转换后的结果是:{v}")


修正后的代码中,循环体中根据大小关系决定加还是减,判断条件中判断是否是最后一个字符来避免越界访问。这样就能正确地将罗马数字转换为十进制数了。

学习编程中的Ben 发表于 2023-8-17 16:05:04

【罗马数字转十进制代码】

以下是经过修正的完整代码,用于将罗马数字转换为十进制数:

R2N = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}

def roman_num(x):
    r = 0
    n = len(x)
    for i, ch in enumerate(x):
      v = R2N
      if i < n-1 and v < R2N]:
            r -= v
      else:
            r += v
    return r

x = input("请输入一个罗马字符:")
v = roman_num(x)
print(f"转换后的结果是:{v}")


这段代码中,我们修正了几个问题:

1. 将字典名称rc修改为正确的R2N。
2. 在判断语句中,将R2N]修改为v,以避免错误。
3. 调整了计算和累加的逻辑,使其能正确处理罗马数字的转换。

请注意,运行此代码时,请确保输入的罗马数字是合法的。如果输入的罗马数字不符合规范,可能会导致错误的结果。

希望以上代码可以帮助到你。如果还有其他问题,请随时提问。

如果回答对你有帮助,请给我一个最佳答案!{:10_254:}{:10_254:}{:10_254:}

陶远航 发表于 2023-8-17 16:05:25

代码中的 roman_num 函数是用来将罗马数字转换为十进制数的。我稍作修改,给出了一个更容易理解的版本。下面是修改后的代码:

# 罗马数字转十进制
def roman_to_decimal(roman):
    roman_to_num = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}
    decimal = 0
    prev_value = 0

    for ch in reversed(roman):
      curr_value = roman_to_num

      if curr_value >= prev_value:
            decimal += curr_value
      else:
            decimal -= curr_value

      prev_value = curr_value

    return decimal

# 程序主体
x = input("请输入一个罗马数字: ")
v = roman_to_decimal(x)
print(f"转换后的结果是: {v}")


在这个修改后的代码中,我们按从右到左的顺序遍历输入的罗马数字字符串,并根据当前字符的值和前一个字符的值来判断数值的累加或累减。通过这种方式,我们可以正确地将罗马数字转换为十进制数。

希望这个修改后的代码能够帮助你解决问题。如果你还有任何其他疑问,请随时提问。
如果问题已经解决,请设置最佳答案
页: [1]
查看完整版本: 这个罗马数字转十进制咋写啊,感觉卡住了思路