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
заявление, где я добавления мой список и там индекс не менее [0]
, когда я распечатываю все это. Любая помощь здесь?
Я просмотрел стек для подобных вопросов, но решение для них - отступы или потому, что у них есть отрицательный индекс ([-1]
) или что-то в этом роде, но все мои отступы верны, и мой индекс все положительный.
'n [1]' будет с этой ошибкой, если нет индекса не менее '[1]'. Если вы добавите 'print (n)' в начале цикла for, вы увидите, что 'n' имеет длину всего один символ (и, следовательно, не имеет индекса' 1'), когда вы получаете это исключение. – dimo414
@ dimo414 Почему? Я добавил его так, что, когда петли for пробегают мой список ** (x) **, значение «n» будет содержать строку с двумя символами, когда она пробегает циклы. – user3882522
@ user3882522 Как я покажу в своем ответе, что на самом деле не работает, потому что вы делаете слишком много итераций при создании 'x', и вы в конечном итоге добавляете пустые строки в конец списка. – Bakuriu