【问题标题】:Why won't this print?为什么不打印这个?
【发布时间】:2012-10-29 01:18:25
【问题描述】:
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 怎么不打印出 words 字符串和 letters 数组?

【问题讨论】:

  • 您对“for word in words”的使用将通过单词中的单个字母。那是你的本意吗?我建议将单词声明为列表而不是空字符串。
  • 可能是因为 get_words() 不完整,而 words = ""?
  • @monkut 我已经编辑了代码。我以为它会弄得乱七八糟。
  • words 还是空的。您使用的是单词的“本地”副本,而不是此实例副本。要使用实例的副本,您必须使用 self.words.. 引用它。但是这段代码无论如何都不应该运行,您的 sort/get_words() 方法没有使用 self。没有必要在这里把它变成一个类...删除“class anagram_generator”和 dedent。
  • 我真的很困惑你为什么要以这种方式构建课程。你是否意识到你是在类本身而不是实例上创建属性,并且会在类定义时调用你的函数——这些函数不能作为实例方法工作?您确定要这样设计您的课程吗?

标签: python variables for-loop


【解决方案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()

希望对你有帮助:)

【讨论】:

    【解决方案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 变量也会抛出错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      • 1970-01-01
      • 2020-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多