2012-10-29 303 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 doesen't打印出單詞字符串和字母數組?爲什麼不打印?

+0

您使用「爲單詞中的單詞「將通過單詞中的單個字母進行。那是你的意圖嗎?我會建議將單詞聲明爲一個列表而不是一個空字符串。 –

+0

也許是因爲get_words()不完整,而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(在其他地方輸入name和assign value,而不是在任何函數中)。但在這種情況下,當你使用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變量也會拋出錯誤。