python从0开始 第43讲的编程第0题
罗马数字包含 I、V、X、L、C、D、M 七种字符,分别表示数值 1、5、10、50、100、500、1000。将数字 2 写做罗马字符的形式是 II(即 I + I),数字 12 写做 XII(即 X + I + I),27 写做 XXVII(即 X + X + V + I + I),这就有点像咱平时上市场买菜给钱的算法(一颗大白菜 27 元,那么就给两张10元,一张5元和两张1元这样的组合)。
罗马字符的组合也存在一些特殊规则,比如 4 不写做 IIII,而是 IV(即 I 在 V 的左边,表示 5 - 1,因此得到数字 4),类似的特例如下:
I 可以放在 V(5)和 X(10)的左边,表示 4 和 9
X 可以放在 L(50)和 C(100)的左边,表示 40 和 90
C 可以放在 D(500)和 M(1000)的左边,表示 400 和 900
题目要求:编写一个函数,将指定的罗马字符转换为数字的形式。
我的代码:
dic1 = {"I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000}
count = 0
def jisuan2():
global count
for j in range(len(list1)):
if list1 + list1 == "IV" or list1 + list1 == "IX" or list1 + list1 == "XL" or list1 + list1 == "XC" or list1 + list1 == "CD" or list1 + list1 == "CM":
count = count + (int(dic1.get(list1)) - int(dic1.get(list1)))
j = j + 2
else:
count = count + int(dic1.get(list1))
return count
list1 = input("请输入一个罗马字符:")
print("结果是:", jisuan2())
错误原因:IndexError: string index out of range
找不到代码逻辑到底哪里出错 希望大神们帮助一下
您的代码存在一些问题。首先,您定义了一个名为`list1`的变量来接收用户输入的罗马字符,但您在循环中尝试使用`list1`作为索引来访问字符。这是不正确的,因为字符串是不可更改的,不能像列表一样进行索引操作。要获取字符串的特定字符,您可以通过索引操作符`[]`加上位置索引来实现,例如`list1`。
其次,在判断特殊情况时,您使用了`list1 + list1`来判断是否为特殊组合的罗马数字。这是不正确的,因为`list1`是一个字符串,它不会自动与自身连接。要判断字符串是否为特定值,您可以使用`==`运算符。
最后,虽然您在循环中尝试通过`j = j + 2`来跳过已处理的特殊组合,但这样做是不必要的。您可以通过直接将`j`增加2来实现。此外,由于所有的特殊组合都是由两个字符组成的,所以您可以通过判断`list1`是否等于特殊组合来处理它们。
以下是修复后的代码示例:
dic1 = {"I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000}
count = 0
def jisuan2():
global count
for j in range(len(list1)):
if j < len(list1) - 1 and list1 in ["IV", "IX", "XL", "XC", "CD", "CM"]:
count = count + (dic1] - dic1])
j = j + 1
else:
count = count + dic1]
return count
list1 = input("请输入一个罗马字符:")
print("结果是:", jisuan2())
希望这可以帮助您解决问题!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 看看完整报错信息 cjjJasonchen 发表于 2024-1-31 21:23
看看完整报错信息
显示第7行IndexError: string index out of range dic1 = {"I":1, "V":5, "X":10, "L":50, "C":100, "D":500, "M":1000}
count = z = 0
def jisuan2():
global count
global z
for j in range(len(list1)):
if z != 0:
z = z - 1
continue
else:
if list1 in ["IV", "IX", "XL", "XC", "CD", "CM"]:
count = count + (int(dic1.get(list1)) - int(dic1.get(list1)))
z = 1
else:
count = count + int(dic1.get(list1))
return count
list1 = input("请输入一个罗马字符:")
print("结果是:", jisuan2())
谢谢大哥们关系 我刚刚自己改出来了 更改了判定就好啦 shangshuai 发表于 2024-1-31 21:30
显示第7行IndexError: string index out of range
for 循环那里,len()后面-1
如果解决了的话别忘了给个最佳喔~ 感谢最佳~
页:
[1]