#python #list #newline
Вопрос:
Я создаю проект викторины для школы с использованием Python, и в качестве его части я должен хранить вопросы и ответы во внешнем файле. В настоящее время вопросы и их ответы находятся в одной строке текстового документа, из которого они получены, например;
- Что означает процессор?na) Центральный блок программированияnb) Центральный процессорnc) Блок процесса охлажденияnd) Блок компьютерной обработки
Однако, когда он напечатан, n
он не работает и выглядит точно так, как я отформатировал его выше. Есть ли простой способ разместить ответы в отдельных строках, сохраняя при этом вопрос и все четыре ответа в одном элементе списка? Вся функциональность проекта в порядке, эта визуальная ошибка-единственная проблема.
Если это поможет, вот несколько упрощенная часть рассматриваемого кода:
questions_answers = open("qamp;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)
Комментарии:
1. Где код, который печатается?
2. ответ = ввод(вопрос. вопрос)
3. Я знаю, что смысл в том, чтобы оно было в скобках после функции ввода, чтобы оно отображалось пользователю, а затем позволяло ему вводить данные. Это работает точно так же, как, скажем, ввод(«Пожалуйста, введите свое имя»).
Ответ №1:
TLDR:
Допустим question
, это строка, которую вы хотите напечатать. Вы можете сделать следующее, чтобы он отображался в нужном вам виде:
import codecs
unescaped_question = codecs.escape_decode(bytes(question, "utf-8"))[0].decode("utf-8")
print(unescaped_question)
А теперь позвольте мне объяснить подробнее…
Рассмотрим обычный строковый объект в python str("QuestionnAnswer")
. Если вы распечатаете его либо в терминале, либо в файле, он, естественно, будет отформатирован в:
Question
Answer
Вы должны пройти «дополнительную длину», чтобы избежать строки, сделав ее str("Question\nAnswer")
такой, чтобы она выглядела как
QuestionnAnswer
в текстовом файле. Вот почему, когда вы прочтете его из файла и распечатаете снова, вы не получите «Вопрос» и «Ответ» отдельно.
Интуитивно это имеет смысл, потому что, если вы прочитаете строку из файла и немедленно распечатаете ее обратно, никаких изменений не должно произойти. К сожалению, это также означает, что ваш текстовый файл в формате pre-printf нуждается в дальнейшей обработке…
Комментарии:
1. Спасибо вам за это, куда бы я это поместил в своем коде? Нужно ли мне вносить какие-либо изменения для работы с именами моих переменных? Я все еще новичок в Python, как вы, вероятно, можете сказать, так что спасибо вам за помощь
2. Я предполагаю, что вы читаете строку из файлового объекта , скажем
f
, с помощьюquestion = f.readline()
. Тогда вам просто нужно:unescaped_question = codecs.escape_decode(bytes(question, "utf-8"))[0].decode("utf-8") print(unescaped_question)
Также добавьте» импорт кодеков » в верхнюю часть вашего файла3. Извините за беспокойство, но я все еще не понимаю, строка отображается с помощью ответа = ввод(вопрос. вопрос) строка, я не могу заставить ее работать, даже когда пытаюсь создать новый сценарий, более похожий на ваши предположения
4. Подсказка: я использую
print()
для печати. И вы используетеinput()
для печати. Не имеет значения, что используется для печати, но то, что печатается, является ключом. В моем примере печатный контент называетсяunescaped_question
. Для создания содержимого требуется исходное чтение из файла под названиемquestion
. В вашем случаеquestion
эквивалентность равнаquestion.question
5. Я лег спать после того, как пытался заставить его работать около часа прошлой ночью, и я только что проснулся сегодня утром и сумел заставить его работать в течение нескольких минут, большое вам спасибо! 🙂
Ответ №2:
Если я правильно понимаю, вы должны распечатать строки, прежде чем запрашивать ввод
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"
}]
}
Комментарии:
1. Спасибо за ответ, я попытался заставить это работать, но я просто получаю ошибку; Ошибка атрибута: объект «Вопрос» не имеет атрибута «разделение»
2. Извините, забыл, что это был список объектов
3. Я понятия не имею, как использовать JSON, но я постараюсь разобраться в этом, спасибо