【问题标题】:python for loop is not working as it shouldpython for循环不能正常工作
【发布时间】:2015-03-27 20:52:25
【问题描述】:
class Note:

    note_number = 1

    def __init__(self, title="", memo="", id="", tag=""):

        self.memo = memo
        self.id = id
        self.number= Note.note_number
        Note.note_number += 1

    def __str__(self):

        return self.memo

class NoteBook:


    def __init__(self):
        self.note_book = []

    def add_note(self, *args):
            self.note_book.extend(args)

    def print(self):
        for note in self.note_book:
            print(note)

n1 = Note(memo = "I love chemistry")
n2 = Note("I hate chemistry")
n3 = Note("Inorganic")
notebook1 = NoteBook()
notebook1.add_note(n1, n2, n3)
notebook1.print()

我创建了 3 个笔记对象并将它们添加到笔记本对象中,这是一个使用 add_note() 函数的列表。如果我用 print(notebook1) 打印笔记本,它会在列表中正确显示 3 个项目。当我尝试使用 print() 函数时,该函数应该遍历列表并打印每个音符的 str 我只得到第一个音符“我爱化学”而不是其他 2请注意为什么会这样?

I love chemistry

【问题讨论】:

  • 您错过了其他 2 个笔记对象的“memo =”?

标签: python


【解决方案1】:

如果你想让它打印备忘录 - 你应该用备忘录创建笔记:

变化:

n1 = Note(memo = "I love chemistry")
n2 = Note("I hate chemistry")
n3 = Note("Inorganic")

到:

n1 = Note(memo = "I love chemistry")
n2 = Note(memo = "I hate chemistry")
n3 = Note(memo = "Inorganic")

【讨论】:

    【解决方案2】:

    您的__str__ 返回memo。所以你应该用memo初始化你所有的笔记:

    n1 = Note(memo="I love chemistry")
    n2 = Note(memo="I hate chemistry")
    n3 = Note(memo="Inorganic")
    

    通过使用Note("I hate chemistry"),您只初始化了Note 的构造函数的第一个参数,即title。也就是说,您可以做的最小更改是在构造函数中:

    def __init__(self, memo="", title="", id="", tag=""):
    

    【讨论】:

      【解决方案3】:

      它打印三个项目,但仅针对您已将memo 设置为正确值的第一个项目。

      构造函数定义为:

      def __init__(self, title="", memo="", id="", tag="") :
      

      所以第一个参数是title,而你似乎没有对title 做任何事情。

      当你构建笔记时:

      n1 = Note(memo = "I love chemistry")
      n2 = Note("I hate chemistry")
      n3 = Note("Inorganic")
      

      仅针对第一个,您明确声明memo =

      结果如果你调用程序,你会得到这样的结果:

      $ python3 notebook.py
      I love chemistry
      
      
      $
      

      所以两个空白行源自打印注释,.note 等于空字符串。

      【讨论】:

        猜你喜欢
        • 2021-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-24
        • 1970-01-01
        • 1970-01-01
        • 2022-01-16
        相关资源
        最近更新 更多