2012-10-29 307 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变量也会抛出错误。