为什么这条线不打印?

时间:2018-04-23 23:15:58

标签: python

我正在尝试用Python创建一个ASCII级别的编辑器,但我遇到了一个问题。在我的renderer函数中有一个for循环,在该级别的行上打印之后,应该打印一个换行符。但是,它似乎不起作用。它是newLine函数吗?

import os

class LevelEditor:

    def __init__(self, level = [], currentLine = 0, line = ""):
        self.level = level
        self.currentLine = currentLine
        self.line = line

    def renderer(self):

        for i in range(len(self.level)):
            for j in range(len(self.level[i])):
                print(self.level[i][j], end="")
            print()

    def clearScreen(self):
        if os.name == "posix":
            os.system("clear")
        elif os.name == "nt":
            os.system("cls")
        else:
            print("OS not recognized")

        print()

    def newLine(self):
        self.line = input("\n")

        self.level += [[]]

        # add line to level
        for i in range(len(self.line)):
            self.level[self.currentLine] += self.line[i]

    def loop(self):
        while(True):
            self.clearScreen()
            self.renderer()
            self.newLine()


Editor = LevelEditor()
Editor.loop()

1 个答案:

答案 0 :(得分:3)

尝试打印self.level中的内容。如果您输入了行123456789,那么您想要的就是这样:

[['1', '2', '3'], ['4', '5', '6'], ['7', '8', '9']]

......但你拥有的是:

[['1', '2', '3', '4', '5', '6', '7', '8', '9'], [], []]

为什么呢?因为你用它添加它们:

self.level[self.currentLine] += self.line[i]

...而且你永远不会在任何地方增加self.currentLine。您可能希望将此行添加到newLine的末尾:

self.currentLine += 1

但是,构建新行并添加它可能更简单,甚至不需要使用currentLine变量。而且,就此而言,您不需要line属性;那只是一个局部变量。另外,您不需要循环将字符串逐个转换为字符列表。所以,您可以用以下内容替换整个内容:

line = input('\n')
self.level += list(line)

作为旁注,您可能不希望将[]用作self.level的默认值。如果您这样做,并使用默认参数创建两个单独的LevelEditor实例,它们将最终共享相同的列表。要解决这个问题,请执行以下操作:

def __init__(self, level=[]):
    self.level = list(level)

...或者,如果您想允许明确共享列表,但不是偶然的:

def __init__(self, level=None):
    self.level = [] if level is None else level

......或者,是否真的有理由允许传入一个值?如果不是:

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