【发布时间】:2016-08-11 18:09:03
【问题描述】:
def romanToNum(word):
word = word.upper()
numeralList2 = list(zip(
[1000, 500, 100, 50, 10, 5, 1],
['M', 'D', 'C', 'L', 'X', 'V', 'I']
))
num = 0
x = []
a = 0
b = 2
if len(word) % 2 != 0:
word = word + "s"
for i in range(0,len(word)):
x.append(word[a:b])
a = a + 2
b = b + 2
print(x[i])
for n in x:
for nNum,rNum in numeralList2:
if n == rNum:
num = nNum + num
elif n == (n[0] + n[1]):
num = (nNum*2) + num
elif n[0] == rNum:
r1 = 0
r1 = nNum
elif n[1] == rNum:
r2 = 0
r2 = nNum
elif r1 < r2:
num = num + (r2 - r1)
elif r1 > r2:
num = num + (r1 + r2)
return num
romanToNum("xxx")
我收到以下错误:
elif n == (n[0] + n[1]):
IndexError: string index out of range
我将它放在循环中的哪个位置并不重要,它只是不会识别n 具有索引值。
我也收到此错误:Traceback (most recent call last):
当我调用我的函数时:romanToNum("xxx")
我不太确定发生了什么,因为我在添加列表的位置添加了 print 语句,并且 is 的索引至少为 [0] 当我把它全部打印出来的时候。这里有什么帮助吗?
我已经在堆栈中查看了类似的问题,但它们的解决方案是缩进,或者因为它们有一个负索引([-1])或类似的东西,但我所有的缩进都是正确的,我的索引都是正的。
【问题讨论】:
-
如果没有至少为
[1]的索引,n[1]将失败并出现该错误。如果您在 for 循环的开头添加print(n),您将看到n只有一个字符长(因此没有索引1)当您遇到此异常时。 -
@dimo414 为什么不呢?我附加了它,以便当 for 循环通过我的 list(x) 运行时,“n”值将在循环中运行时包含 2 个字符串。
-
@user3882522 正如我在回答中所展示的那样,这并没有真正起作用,因为您在构建
x时进行了太多迭代,并且最终将空字符串添加到列表的末尾。跨度>
标签: python string list for-loop