鱼C论坛

 找回密码
 立即注册
查看: 1564|回复: 3

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

[复制链接]
发表于 2023-8-17 16:04:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求助代码
"""罗马数字转十进制"""
#罗马数字有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[ch]
        if i < n-1 and v < R2N[x[i+1]]:
            r += R2N[x[i]]
        else:
            r += R2N[x[i+1]]
            r -= R2N[x[i]]
            
    return r;
            
        
#程序主体
x = input("请输入一个罗马字符:")
v = roman_num(x)
print(f"转换后的结果是:{v}")
主要是中间循环体和判断中不好描述

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

以下是修正后的代码:
# 罗马字符转数字
def roman_num(x):
    r = 0
    n = len(x)
    for i, ch in enumerate(x):
        v = R2N[ch]
        if i < n-1 and v < R2N[x[i+1]]:
            r -= v
        else:
            r += v
    return r

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

修正后的代码中,循环体中根据大小关系决定加还是减,判断条件中判断是否是最后一个字符来避免越界访问。这样就能正确地将罗马数字转换为十进制数了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-17 16:05:04 | 显示全部楼层    本楼为最佳答案   
问题出在循环体和判断条件上。在循环体中,你需要根据当前字符和下一个字符的大小关系来决定加还是减。在判断条件中,你需要判断当前字符是否是最后一个字符,以避免越界访问。

以下是修正后的代码:
# 罗马字符转数字
def roman_num(x):
    r = 0
    n = len(x)
    for i, ch in enumerate(x):
        v = R2N[ch]
        if i < n-1 and v < R2N[x[i+1]]:
            r -= v
        else:
            r += v
    return r

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

修正后的代码中,循环体中根据大小关系决定加还是减,判断条件中判断是否是最后一个字符来避免越界访问。这样就能正确地将罗马数字转换为十进制数了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[ch]        if i < n-1 and v < R2N[x[i+1]]:            r -= v        else:            r += v    return rx = input("请输入一个罗马字符:")v = roman_num(x)print(f"转换后的结果是:{v}")
这段代码中,我们修正了几个问题:

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

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

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

如果回答对你有帮助,请给我一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[ch]

        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}")

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

希望这个修改后的代码能够帮助你解决问题。如果你还有任何其他疑问,请随时提问。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 19:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表