【发布时间】:2020-06-25 17:56:05
【问题描述】:
我想从控制台获取一个包含多行文本的输入。由于我想在单个输入中完成所有操作,因此我必须在中间标记 '\n' 以指示不同的行。 获得输入后,我想将文本保存在矩阵中,其中每一行都是文本中的一行,单词分开。
这是我的职责:
def saveText(text):
text = text[6:len(text)-6]
line = 0
array = [[]]
cur = ""
for i in range (len(text)):
if (text[i] == '\n'):
line+=1
array.append([])
else:
if ((text[i] == ' ' or text[i] == ',' or text[i] == ';' or text[i] == '.') and cur != ""):
array[line].append(cur)
cur = ""
else:
cur += text[i]
return array
但是,当我打印变量 array 时,它显示为只有一行的矩阵,并且除了 '\n' 被计为单词之外,它们还显示为 '\n'。
谁能帮我解决这个问题?
【问题讨论】:
-
我实际上使用了 print() 函数,但无论哪种方式,我都在打印使用输入创建的数组,所以问题可能就在那里......
-
当你打印一个列表时,你会得到换行符的转义表示。所以,
print(["\n"])给你['\n'],即使那真的是一个字符的新行。如果您打印列表中的每个元素,您将得到真正的换行符,它在屏幕上看起来像一个空白行。 -
像
list(itertools.chain.from_iterable(x.split(" ,;.") for x in io.StringIO(text[6:-6])))这样的东西可能比逐个字符地迭代文本更简单、更快。 -
但问题是,在函数上,我尝试过滤所有字符,如 ',' ';' '。'和 '\n'... 换行符甚至不应该在那里。我的目标是最终的矩阵只有单词,没有任何特殊字符。它真的“过滤”了所有这些,除了换行符
-
仅供参考:快捷方式
if text[i] in ' .,;' and cur:
标签: python input newline paragraph