我正在编写一个问答游戏,在尝试执行时得到了奇怪的结果。 这是主要代码:
question_bank = []
for question in question_data:
question_text = question["text"]
question_answer = question["answer"]
new_question = Question(question_text, question_answer)
question_bank.append(new_question)
quiz = QuizBrain(question_bank)
while quiz.still_has_questions():
quiz.next_question()
这是涉及的班级:
class QuizBrain:
def __init__(self, q_list):
self.question_number = 0
self.question_list = q_list
def still_has_questions(self):
return self.question_number < len(self.question_list)
def next_question(self):
current_question = self.question_list[self.question_number]
self.question_number += 1
input(f"Q.{self.question_number}: **{current_question}** (True / False): ")
运行代码后,我得到这一行:
问题 1:**
不知道为什么“current_question”返回位置而不是值。
您应该在
__str__
类中定义 __repr__
和/或 Question
函数。
例如:
class Question:
def __init__(self, question_text: str, question_answer: str):
self.question_text = question_text
self.question_answer = question_answer
def __str__(self) -> str:
return self.question_text
def __repr__(self) -> str:
return f'Question({self.question_text=}, {self.question_answer=})'
>>> q1 = Question('1 > 2 ?', 'False')
>>> print(q1)
1 > 2 ?
>>> print(repr(q1))
Question(self.question_text='1 > 2 ?', self.question_answer='False')
这是因为你调用的不是当前问题的文本,而是整个问题。 next_question 方法中的第 12 行应该这样完成:input(f"Q.{self.question_number + 1}: {current_question.text} (True or False): ")