有没有一种简单的方法可以将换行符添加到 Python 列表中的单个项目中?
Is there a simple way to add newlines into individual items in a list in Python?
我正在使用 Python 为学校制作一个测验项目,作为其中的一部分 我必须将问题和答案存储在外部文件中 。目前,问题和答案在接收它们的文本文档中位于同一行,例如;
- CPU代表什么?\na) 中央编程Unit\nb) 中央处理Unit\nc) 冷却处理Unit\nd) 计算机处理单元
然而,当它被打印出来时,\n
没有发挥作用,看起来和我上面格式化的一模一样。有没有一种简单的方法可以让答案分行 同时将问题和所有四个答案 保留在同一个列表项中?项目的整个功能都很好,这个视觉错误是唯一的问题。
如果有帮助,这里是相关代码的简化部分:
questions_answers = open("q&a.txt", "r")
class Question:
def __init__(self, question, answer):
self.question = question
self.answer = answer
line_of_questions = [1, 2, 3, 4, 5]
for position, line in enumerate(questions_answers):
if position in line_of_questions:
question_prompts.append(line)
questions = [
Question(question_prompts[0], "b"),
Question(question_prompts[1], "a"),
Question(question_prompts[2], "c"),
Question(question_prompts[3], "a"),
Question(question_prompts[4], "d")
]
def Start_Quiz(questions):
score = 0
for question in questions:
answer = input(question.question)
if answer == question.answer:
score += 1
Start_Quiz(questions)
如果我没理解错的话,你应该在要求输入之前打印这些行
for question in questions:
for line in question.question.split('\n'):
print(line)
answer = input()
否则,与其拆分,我建议以更好的文件格式存储数据,例如 JSON,然后您可以解析它并循环遍历选项列表
{
"questions": [{
"prompt": "What is a CPU",
"options": [
"A) Central ...",
"B) Cooling ..."
],
"answer": "A"
}]
}
TLDR:
假设 question
是您要打印的字符串。您可以执行以下操作以使其以您想要的方式显示:
import codecs
unescaped_question = codecs.escape_decode(bytes(question, "utf-8"))[0].decode("utf-8")
print(unescaped_question)
现在,让我解释更多...
考虑 python str("Question\nAnswer")
中的普通字符串对象。如果您将它打印到终端或文件,它自然会格式化为:
Question
Answer
您必须“加长”以转义字符串,方法是使它 str("Question\nAnswer")
使其显示为
Question\nAnswer
在文本文件中。这就是为什么当您从文件中读回并再次打印时,您不会将“问题”和“答案”分开。
从直觉上讲,这是完全合理的,因为如果您从文件中读取一行并立即将其打印回来,应该不会发生任何更改。不幸的是,这也意味着您的预 printf 格式的文本文件需要进一步处理...
我正在使用 Python 为学校制作一个测验项目,作为其中的一部分 我必须将问题和答案存储在外部文件中 。目前,问题和答案在接收它们的文本文档中位于同一行,例如;
- CPU代表什么?\na) 中央编程Unit\nb) 中央处理Unit\nc) 冷却处理Unit\nd) 计算机处理单元
然而,当它被打印出来时,\n
没有发挥作用,看起来和我上面格式化的一模一样。有没有一种简单的方法可以让答案分行 同时将问题和所有四个答案 保留在同一个列表项中?项目的整个功能都很好,这个视觉错误是唯一的问题。
如果有帮助,这里是相关代码的简化部分:
questions_answers = open("q&a.txt", "r")
class Question:
def __init__(self, question, answer):
self.question = question
self.answer = answer
line_of_questions = [1, 2, 3, 4, 5]
for position, line in enumerate(questions_answers):
if position in line_of_questions:
question_prompts.append(line)
questions = [
Question(question_prompts[0], "b"),
Question(question_prompts[1], "a"),
Question(question_prompts[2], "c"),
Question(question_prompts[3], "a"),
Question(question_prompts[4], "d")
]
def Start_Quiz(questions):
score = 0
for question in questions:
answer = input(question.question)
if answer == question.answer:
score += 1
Start_Quiz(questions)
如果我没理解错的话,你应该在要求输入之前打印这些行
for question in questions:
for line in question.question.split('\n'):
print(line)
answer = input()
否则,与其拆分,我建议以更好的文件格式存储数据,例如 JSON,然后您可以解析它并循环遍历选项列表
{
"questions": [{
"prompt": "What is a CPU",
"options": [
"A) Central ...",
"B) Cooling ..."
],
"answer": "A"
}]
}
TLDR:
假设 question
是您要打印的字符串。您可以执行以下操作以使其以您想要的方式显示:
import codecs
unescaped_question = codecs.escape_decode(bytes(question, "utf-8"))[0].decode("utf-8")
print(unescaped_question)
现在,让我解释更多...
考虑 python str("Question\nAnswer")
中的普通字符串对象。如果您将它打印到终端或文件,它自然会格式化为:
Question
Answer
您必须“加长”以转义字符串,方法是使它 str("Question\nAnswer")
使其显示为
Question\nAnswer
在文本文件中。这就是为什么当您从文件中读回并再次打印时,您不会将“问题”和“答案”分开。
从直觉上讲,这是完全合理的,因为如果您从文件中读取一行并立即将其打印回来,应该不会发生任何更改。不幸的是,这也意味着您的预 printf 格式的文本文件需要进一步处理...