如何解决Python 程序一次遍历整个 for in range 循环,并像 while 循环一样进行迭代
import csv
import random
from datetime import date
import pygame
from pygame.locals import *
import sys
mainClock = pygame.time.Clock()
pygame.init()
pygame.display.set_caption('Game')
screen = pygame.display.set_mode((900,600),32)
# noinspection PyTypeChecker
answer_font = pygame.font.SysFont(None,50)
# noinspection PyTypeChecker
question_font = pygame.font.SysFont(None,30)
class QuestionAnswerControls:
def __init__(self):
self.score = 0
self.questions = []
self.answers = []
self.correctAnswers = []
def get_question_answer(self):
questions_and_answers = []
with open('questions.txt',newline='') as f:
reader = csv.reader(f,delimiter='\t')
for row in reader:
questions_and_answers.append(row)
random.shuffle(questions_and_answers)
for q in questions_and_answers:
self.questions.append(q[0])
self.correctAnswers.append(q[1])
del q[0]
random.shuffle(q)
self.answers.append(q)
def get_number_of_questions(self):
noq = int(len(self.questions))
return noq
def get_question(self,question_number):
question = self.questions[question_number]
return question
def get_answers(self,answer_set_number):
answer_set = self.answers[answer_set_number]
return answer_set
def get_correct_answer(self,correct_answer_number):
correct_answer = self.correctAnswers[correct_answer_number]
return correct_answer
def increase_score(self):
self.score += 1
def export_scores(self):
with open('scores.txt',mode='a') as scores:
scores = csv.writer(scores,delimiter='\t')
today = date.today()
date_format = today.strftime("%d/%m/%Y")
scores.writerow([date_format,self.score])
def draw_text(text,font,colour,surface,x,y):
textobj = font.render(text,1,colour)
textrect = textobj.get_rect()
textrect.topleft = (x,y)
surface.blit(textobj,textrect)
click = False
def question_answer_gui():
global click
game_menu = True
while game_menu:
screen.fill((0,0))
mx,my = pygame.mouse.get_pos()
question_rect = pygame.Rect(100,100,700,100)
button_answer_one = pygame.Rect(100,250,325,100)
button_answer_two = pygame.Rect(475,100)
button_answer_three = pygame.Rect(100,400,100)
button_answer_four = pygame.Rect(475,100)
click = False
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
pygame.quit()
sys.exit()
if event.type == MOUSEBUTTONDOWN:
if event.button == 1:
click = True
for c in range(0,questionAnswerGame.get_number_of_questions()):
screen.fill((0,0))
question_answered = False
question = questionAnswerGame.get_question(c)
correct_answer = questionAnswerGame.get_correct_answer(c)
answers = questionAnswerGame.get_answers(c)
answer_chosen = ""
print(question,answers,correct_answer)
pygame.draw.rect(screen,(255,0),question_rect)
draw_text(str(question),question_font,255,255),screen,200,135)
pygame.draw.rect(screen,button_answer_one)
draw_text(str(answers[0]),answer_font,175,285)
pygame.draw.rect(screen,button_answer_two)
draw_text(str(answers[1]),525,button_answer_three)
draw_text(str(answers[2]),435)
pygame.draw.rect(screen,button_answer_four)
draw_text(str(answers[3]),435)
if button_answer_one.collidepoint((mx,my)):
if click:
answer_chosen = answers[0]
question_answered = True
if button_answer_two.collidepoint((mx,my)):
if click:
answer_chosen = answers[1]
question_answered = True
if button_answer_three.collidepoint((mx,my)):
if click:
answer_chosen = answers[2]
question_answered = True
if button_answer_four.collidepoint((mx,my)):
if click:
answer_chosen = answers[3]
question_answered = True
click = False
print(answer_chosen)
if answer_chosen == correct_answer:
questionAnswerGame.increase_score()
print("Correct")
if question_answered:
pygame.display.update()
mainClock.tick(60)
pygame.display.update()
mainClock.tick(60)
questionAnswerGame = QuestionAnswerControls()
questionAnswerGame.get_question_answer()
question_answer_gui()
for c in range 循环中的打印语句仅用于测试目的,它们不应该出现在最终产品中。
这是我为 A-Level 编程项目制作的游戏的一部分,这只是其中的一个模块。
我的问题是 for c in range 循环将遍历整个 for 语句,而无需等待用户选择答案。打印(问题,答案,正确答案)语句证明了这一点。此外,这个 for 循环似乎有点像 while 循环。当程序只是坐在那里运行时,它会一遍又一遍地按顺序打印出所有问题。
应该发生的是游戏显示问题和答案,用户选择一个答案,他们的分数增加,然后显示下一个问题,用户选择答案等。程序当前呈现第一个问题正确,用户将选择一个答案,然后程序会快速循环所有问题,然后直接回到第一个问题,而不是转到下一个问题。
请帮忙。我需要 for c in range 语句等待用户选择了答案,然后再问下一个问题。
我尝试在最后使用 if 语句仅在选择答案后更新显示,但这只会影响渲染而不影响实际的 for 循环。
附上一些屏幕截图以帮助说明问题。
What the console shows from the print statement used for debugging
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。