Python"列表索引超出范围"列表迭代中的错误

时间:2015-05-21 09:43:24

标签: python

我做错了什么? "列出索引超出范围"在第7行 对于代码中的俄语字母,对不起,这是我的主页。 请帮帮我。

import sys
morze = ['-----', '.----', '..---', '...--', '....-', '.....', '-....', '--...', '---..', '----.']
ralphabet = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя' #Russian alphabet 0-32
doc = "Вот цитата для тебя : Встретив двусмысленность , отбрось искушение угадать . С наилучшими пожеланиями , Андрей ." #doc = open('text.txt') 
print('Не поддерживается правильное отображение знаков препинания. Ставьте знаки через пробел.') #Attention
for line in doc:
    line = line.lower() #Downcase
    for word in line.split(' '):
        ln = len(word) #Length of word
        if ln == 1 and word in ralphabet: #One-letter words
            letternumber = ralphabet.find(word)
            sys.stdout.write(morze[letternumber] + ' ')
        elif ln == 1: #Symbols
            ...
        elif ln != 1 and not (word[0] in alphabet): #Symbols error
            sys.stdout.write('[ERROR]')
        elif ln != 1: #Long words
            shift = ln - 1
            if shift > 10:
                shift = 10
            for letter in word:
                letternumber = ralphabet.find(letter) + 1 - shift
                for digit in str(letternumber):
                    sys.stdout.write(morze[digit] + ' ')
            sys.stdout.write('| ')
        sys.stdout.write('| ')

input() #PAUSE

1 个答案:

答案 0 :(得分:1)

如果您print(letternumber,len(morze))可以确切地看到错误原因,您正在使用单词索引在morze列表中查找内容:

  (31, 10)
   ^    ^   

ralphabet的长度为66,而morze的长度为10,因此无效。

您可能还想更改这两行:

 elif ln > 1 and word[0] not in alphabet:  #Symbols error
            sys.stdout.write('[ERROR]')
 elif ln > 1:  #Long words

0也是!= 1但word[0]无效。

您还在str上调用letternumber,然后尝试将字符串作为索引传递:

       for digit in str(letternumber):
             sys.stdout.write(morze[digit] + ' ')
                                       ^
                                       string = error

您可以使用:

  for digit in range(letternumber):
         sys.stdout.write(morze[digit] + ' ')

但是,如果letternumber = ralphabet.find(letter) + 1 - shift大于10,您将收到错误。