函数4课程动手做第一题
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
if i < n - 1 and v < R2N]:
r -= v
else:
r += v
return r;
s = input("请输入一个罗马字符:")
v = roman2num(s)
print(f"转换后的结果是:{v}")
有师傅能讲解一下,这句话的意思吗
if i < n - 1 and v < R2N]: 最好使用代码格式? “ if i < n - 1 and v < R2N]:”这条代码的意思是:“i<n-1”用于判断是否达到最后一个字符,若为最后一个字符,则跳转到else后的语句,直接加上该字符的值;若不是最后一个字符,则进行第二条语句“v < R2N]”的判断,判断该字符与下一个字符的大小关系,前者小则减去前者的值,前者小则加上前者的值。
可能你不太理解的是第二条判断语句的意义,其实第二个语句的作用就是区别“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。 三个晾衣架 发表于 2022-11-16 12:08
“ if i < n - 1 and v < R2N:”这条代码的意思是:“i
有一个地方写错了,第一句话里面,前者小则减去前者的值,前者大则加上前者的值。
页:
[1]