2015-05-21 2 views
0

Что я делаю неправильно? "Индекс списка за пределами допустимого диапазона" в строке 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

Что такое линия 7? Включите полное сообщение об ошибке. –

+1

Пожалуйста, пост полный обратное прослеживание – Alik

+0

Traceback (самый последний вызов последнего): Файл "", строка 7, в IndexError: индекс списка из диапазона – ftvkyo2011

ответ

1

Вы используете индекс слова, чтобы найти что-то в списке Морзе, если вы print(letternumber,len(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, вы получите ошибка.

+0

'для цифры ул (letternumber): sys.stdout.write (morze [digit] + '') ' – ftvkyo2011

+0

@ ftvkyo2011, это вопрос? –

+0

Это не вопрос. – ftvkyo2011