2012-10-29 3 views
0
class anagram_generator: 
    words = "" 
    letters = [] 
    def get_words(): 
     words = raw_input("input the letters\n") 
     letters = [] 
     i = 0 

    def sort_words(): 
     for word in words: 
      letters.append(word) 
      print letters[i] 
      i = i + 1 

    get_words() 
    sort_words() 

Почему sort_words не распечатывают строку слов и массив букв?Почему эта печать не будет?

+0

Вашего использования «для слово в словах "будет проходить через отдельные буквы в словах. Это то, что вы намеревались? Я бы рекомендовал объявлять слова как список вместо пустой строки. –

+0

возможно потому, что get_words() является неполным, а слова = ""? – monkut

+0

@monkut Я редактировал код. Я думал, что это загромождает его. –

ответ

2

Я не уверен, почему вы кладете класс здесь, потому что отступ не соответствует действительности, и способ, которым вы используете «метод», не похож на то, что вы хотите использовать класс. У меня есть два кода. Один использует класс, а другой - нет.

Во-первых, предположим, что вы действительно хотите использовать класс (и я думаю, что это лучше всего подходит для вашей проблемы):

class Generator: 
    words = "" # you should put words and letters here. this will be attribute and both get_words() and sort_words() can see this 
    letters = [] 
    def get_words(self): 
     words = raw_input("input the letters\n") 
     letters = [] 
     # i = 0 : no effect. it just local variable with method get_words 

    def sort_words(self): 
     i = 0 # must be assign value before use 
     for word in words: 
     letters.append(word) 
     print letters[i] 
      i = i + 1 

Вы должны заметить, когда вы используете класс, каждый метод должен иметь ключевое слово self. Вот тест:

generator = Generator() 
generator.get_words() 
generator.sort_words() 

Если это просто нормальная функция. ваша проблема не работает, потому что некоторые причины:

1) слова и буквы не могут быть объявлены глобальными. Итак, когда вы присваиваете значение этой переменной в get_words(), sort_words() не видит этого. Если вы компилируете и не допускаете ошибок, то по какой-то причине вы назначаете это значение SOMEWHERE в глобальном (введите имя и присвойте значение где-то в другом месте, а не в какой-либо функции). Но в случае этого, когда вы используете get_words(), эти глобальные все еще НЕ обновляются. Таким образом, нет «печатного слова», как вы видите, потому что «слово», которое вы используете, еще не обновляется.

2) i переменная: должно быть назначено значение перед использованием.

Итак, вот код, который я исправил:

def get_words(): 
    global words 
    global letters 
    words = raw_input("input the letters\n") 
    letters = [] 
    # global i=0 : you can do that, but SHOULDN'T 

def sort_words(): 
    i = 0 # i must be assign value before use 
    for word in words: 
     letters.append(word) 
     print letters[i] 
     i = i + 1 

и тест будет:

get_words() 
sort_words() 

Надеется, что это поможет :)

+0

Большое спасибо! –

+0

@MattBettinson Пожалуйста, снова просмотрите мое сообщение. Я редактировал многое. Некоторые - опечатка, а некоторые делают яснее :) – hqt

+0

Да, я прочитал. Я могу сказать, что английский не является вашим вторым языком. Несмотря на это, это было очень полезно. Благодарю. –

2

Вы должны объявить переменные «слова» и «буквы» внутри ваших функций, как глобальный, как так:

def sort_words(): 
global words 
global letters 
i=0 
for word in words: 
    letters.append(word) 
    print letters[i] 
    i = i + 1 

Переменные внутри функции могут быть доступны только в функции, переменные «снаружи» являются не доступны и в вашем случае остаются пустыми ("" или []), см. также Python Doc (поиск "глобальный").

Другое дело, что переменная i, которая не была объявлена ​​с начальным значением, также выдаст ошибку.

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