为什么不打印?

时间:2012-10-29 01:18:25

标签: python variables for-loop

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不会打印出字符串和字母数组?

2 个答案:

答案 0 :(得分: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

函数内部的变量只能在函数中访问,“外部”中的变量不会被访问,并且在您的情况下保持为空(“”或[]),另请参阅Python Doc(搜索“global” )。

另一件事是i变量没有用初始值声明,也会抛出错误。

答案 1 :(得分: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()

希望这会对你有所帮助:)。