2016-11-05 3 views
0

так вот какой код у меня есть, который должен взять текст, введенный пользователем, и создать словарь. Может ли кто-нибудь сказать мне, почему я получаю ошибку трассировки, когда я вызываю функцию main()?Почему я получаю сообщение об ошибке при вызове main()?

def build_index(text): 
    index = {} 
    words = text.split() 

    position = 0 

    for x in text: 
     if x.isalpha() == False and x.isdigit() == False: 
      text.join(x) 
     else: 
      text.replace(x,'') 

    while position < len(words): 
     nextword = words[position] 

     if nextword in index: 
      ref = index[nextword] 
      ref.append(position) 
      index[nextword] = ref 

     else: 
      list = [] 
      list.append(position) 
      index[nextword] = list 
     position += 1 


def displayindex(index): 
    keys = sorted(index.keys()) 
    for key in keys: 
     print(key + ':' + str(index[key])) 

def main(): 
    text = input("enter text") 
    build_index(text) 
    displayindex(index) 
main() 
+5

Можете ли вы разместить сообщение об ошибке трассировки? –

+2

Кстати, вы не назначаете возвращаемые значения из 'text.join (x)' и 'text.replace (x, '')' на что угодно. Они не изменяют строку, из которой они были вызваны, они просто возвращают новую строку с изменениями, которые вы задали для –

+0

. Пожалуйста, отредактируйте свой вопрос, чтобы включить _complete_ traceback. Это сделало бы ваш вопрос полезным для других, которые столкнулись с одной и той же проблемой. Это также помогло бы, если бы вы отредактировали свой заголовок, чтобы включить имя исключения, которое было поднято (например, NameError) ... снова, чтобы помочь другим найти этот вопрос. –

ответ

0

Обратное прослеживание зависит от версии Python вы используете код в В Python 3.x, то отслеживающий объясняет, почему он производит ошибку:.

Traceback (most recent call last):
File "./prog.py", line 37, in
File "./prog.py", line 36, in main
NameError: name 'index' is not defined

TLDR: необходимо добавить/изменить только 3 строки кода. См комментариев в коде ниже

NameError говорят нам, что он не знает, что имя index относится, потому что это выходит за рамки методы main и не получили определенно. Вы могли создать global экземпляр переменной index, как указано в ответе MeterLongCat, но так как индекс делает получить созданы и определены, когда мы называем build_index, мы можем просто вернуться index после этого вызова метода, сохранить возвращаемое значение, а затем передать это к функции displayindex, следующим образом.

OTOH, в Python 2, как указывает MeterLongCat, вы хотите получить строку от пользователя, а это не то, что для input, вы хотите raw_input.

def build_index(text): 
    index = {} 
    words = text.split() 

    position = 0 

    for x in text: 
     if x.isalpha() == False and x.isdigit() == False: 
      text.join(x) 
     else: 
      text.replace(x,'') 

    while position < len(words): 
     nextword = words[position] 

     if nextword in index: 
      ref = index[nextword] 
      ref.append(position) 
      index[nextword] = ref 

     else: 
      list = [] 
      list.append(position) 
      index[nextword] = list 
     position += 1 
    return index     # Return the index 


def displayindex(index): 
    keys = sorted(index.keys()) 
    for key in keys: 
     print(key + ':' + str(index[key])) 

def main(): 
    text = raw_input("enter text") # Use raw_input 
    index = build_index(text)  # Assign the index 
    displayindex(index) 
main() 
0

Я был в состоянии избавиться от ошибки отладочного путем изменения input к raw_input (для Python 2.7). У вас есть другие ошибки, например, index в методе main не определен. Следующие работы: содержание ошибок

index = {} 

def build_index(text): 
    global index 
    words = text.split() 

    position = 0 

    for x in text: 
     if x.isalpha() == False and x.isdigit() == False: 
      text.join(x) 
     else: 
      text.replace(x,'') 

    while position < len(words): 
     nextword = words[position] 

     if nextword in index: 
      ref = index[nextword] 
      ref.append(position) 
      index[nextword] = ref 

     else: 
      list = [] 
      list.append(position) 
      index[nextword] = list 
     position += 1 


def displayindex(index): 
    keys = sorted(index.keys()) 
    for key in keys: 
     print(key + ':' + str(index[key])) 

def main(): 
    global index 
    text = raw_input("enter text") 
    build_index(text) 
    displayindex(index) 
main() 
+0

Я использую 3. (?) Версию python, извините, я не уточнил. –

Смежные вопросы