鱼C论坛

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

[已解决]函数4课程动手做第一题

[复制链接]
发表于 2022-11-15 23:27:58 | 显示全部楼层 |阅读模式

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

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

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


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

    return r;


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

有师傅能讲解一下,这句话的意思吗
if i < n - 1 and v < R2N[s[i + 1]]:
最佳答案
2022-11-16 12:08:59
“ if i < n - 1 and v < R2N[s[i + 1]]:”这条代码的意思是:“i<n-1”用于判断是否达到最后一个字符,若为最后一个字符,则跳转到else后的语句,直接加上该字符的值;若不是最后一个字符,则进行第二条语句“v < R2N[s[i + 1]]”的判断,判断该字符与下一个字符的大小关系,前者小则减去前者的值,前者小则加上前者的值。

可能你不太理解的是第二条判断语句的意义,其实第二个语句的作用就是区别“IV”和“VI”,I在V前面,结果就需要减去I的值;I在V后面,结果就需要加上I的值。举两个例子:
(1)输入的是IV,for语句首先会循环到字符“I”,由于“I”不是最后一个字符,满足第一个条件了,然后由于“I”的值是1,小于下一个字符“V”的值(5),所以结果“r”要减去1;for语句第二次循环到“V”,“V”是最后一个字符,不满足第一个条件“i<n-1”,所以会跳转到else后面的语句,使结果“r”加5,结果就是-1 + 5 = 4。
(2)输入的是VI,for语句首先循环到字符“V”,V不是最后一个字符,满足第一个条件,但由于“V”的值是5,大于下一个字符“I”的值(1),所以跳转到esle后的语句,结果“r”加5;for语句第二次循环到“I”,“I”是最后一个字符,不满足第一个条件“i<n-1”,所以会直接加1,结果就是5 + 1 = 6。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-11-16 11:15:31 | 显示全部楼层

回帖奖励 +1 鱼币

最好使用代码格式?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-16 12:08:59 | 显示全部楼层    本楼为最佳答案   
“ if i < n - 1 and v < R2N[s[i + 1]]:”这条代码的意思是:“i<n-1”用于判断是否达到最后一个字符,若为最后一个字符,则跳转到else后的语句,直接加上该字符的值;若不是最后一个字符,则进行第二条语句“v < R2N[s[i + 1]]”的判断,判断该字符与下一个字符的大小关系,前者小则减去前者的值,前者小则加上前者的值。

可能你不太理解的是第二条判断语句的意义,其实第二个语句的作用就是区别“IV”和“VI”,I在V前面,结果就需要减去I的值;I在V后面,结果就需要加上I的值。举两个例子:
(1)输入的是IV,for语句首先会循环到字符“I”,由于“I”不是最后一个字符,满足第一个条件了,然后由于“I”的值是1,小于下一个字符“V”的值(5),所以结果“r”要减去1;for语句第二次循环到“V”,“V”是最后一个字符,不满足第一个条件“i<n-1”,所以会跳转到else后面的语句,使结果“r”加5,结果就是-1 + 5 = 4。
(2)输入的是VI,for语句首先循环到字符“V”,V不是最后一个字符,满足第一个条件,但由于“V”的值是5,大于下一个字符“I”的值(1),所以跳转到esle后的语句,结果“r”加5;for语句第二次循环到“I”,“I”是最后一个字符,不满足第一个条件“i<n-1”,所以会直接加1,结果就是5 + 1 = 6。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-16 12:11:08 | 显示全部楼层
三个晾衣架 发表于 2022-11-16 12:08
“ if i < n - 1 and v < R2N[s]:”这条代码的意思是:“i

有一个地方写错了,第一句话里面,前者小则减去前者的值,前者大则加上前者的值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 15:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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