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 :(得分: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()
希望这会对你有所帮助:)。