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が単語の文字列と文字の配列を出力しないのはなぜですか?

4

2 に答える 2

2

関数内の変数「words」と「letters」を次のようにグローバルとして宣言する必要があります。

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

関数内の変数は関数内でのみアクセスでき、「外部」からの変数はアクセスされず、この場合は空のままです( ""または[]) 。 PythonDoc(「グローバル」を検索)も参照してください。

もう1つは、初期値で宣言されていないi変数も、エラーをスローすることです。

于 2012-10-29T01:28:55.560 に答える
2

インデントが正しくなく、「メソッド」の使用方法がクラスの使用方法とは異なるため、なぜここにクラスを配置するのかわかりません。2つのコードがあります。1つはクラスを使用しており、もう1つはクラスを使用していません。

まず、あなたが本当にクラスを使いたいと仮定します(そして私はあなたの問題にこれが最善だと思います):

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()はそれを認識しません。コンパイルしてもエラーが発生しない場合は、何らかの理由で、これらの値をグローバルでどこかに割り当てています(名前を入力し、関数ではなく、別の場所に値を割り当てます)。ただし、その場合、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()

これがお役に立てば幸いです:)

于 2012-10-29T01:38:00.967 に答える