为什么我的 if 语句中的中断不起作用?

问题描述 投票:0回答:1

我有一段代码,在 for 循环内有一个 if 语句。该 if 语句末尾有一个中断条件。它不起作用,我的代码在这种情况下不会中断。我还有与此类似的其他代码,它仅适用于这种情况。我看不明白为什么

这是有问题的代码片段

# Counts when touch was outside of button 
elif distance_button.length() > button_radius:
    historylist.append(0) 
    distance_button_0 =
    pygame.math.Vector2(button_x_spacing,button_positionsy[0]) -        pygame.math.Vector2(pygame.mouse.get_pos())
    distance_button_1 =  pygame.math.Vector2(button_x_spacing,button_positionsy[1]) -     pygame.math.Vector2(pygame.mouse.get_pos())
    distance_button_2 = pygame.math.Vector2(button_x_spacing,button_positionsy[2]) - pygame.math.Vector2(pygame.mouse.get_pos())
    if distance_button_0.length() < button_radius:
        incorrectleft += 1
        timenow = time.time()
        writer.writerow([trialnum, 210, timenow - time_start])
    elif distance_button_1.length() < button_radius:
        incorrectmiddle += 1
        timenow = time.time()
        writer.writerow([trialnum, 211, timenow - time_start])
    elif distance_button_2.length() < button_radius:
        incorrectright += 1
        timenow = time.time()
        writer.writerow([trialnum, 212, timenow - time_start])       
    break

这是总代码

import pygame
import csv
import time
import sys
import os
import signal
import math
import random
from datetime import datetime
#import RPi.GPIO as GPIO
#from picamera2 import Picamera2
#from picamera2.encoders import H264Encoder


# Event Codes
# 0  ---first button display
# 1  ---second button display
# 2  ---third button display
# 100---plus sign onset
# 110---target onset
# 150---correct response 
# 200---reward onset
# 210---incorrect first button
# 211---incorrect second button
# 212---incorrect third button
# 216---never-reinforced error
# 250---timeout


# Constants
ITI = 2 # Inter-trial interval in seconds
plus = 0.5
Trial_Duration = 10
prep_time = 0
values = [0,1,2]
rewards_size = 1.2
rewardDelay = 0.5

# Reward Initialzation
#GPIO.setmode(GPIO.BCM)
#GPIO.setwarnings(False)
#rewardpin = 12
#GPIO.setup(rewardpin,GPIO.OUT)

# Initialize pygame starts
pygame.init()

# Set the dimensions of the screen
screen_width = 1275
screen_height = 750
WIDTH = 1280
HEIGHT = 720
FRAME_RATE = 60

# Set the colors
white = (255, 255, 255)
black = (0, 0, 0)
grey = (60, 60, 60)
pink = (255,127,127)
bright = (200, 200, 200)
yellow  = (255, 255, 000)
redorgreen = (255, 000, 000)
blue = (000, 000, 204)

colourlist = [yellow, redorgreen, blue]

screenfill = bright
button_colour = black

# Set the button properties
button_radius = 130
button_x_spacing = 450
button_y_spacing = 200

# Set the button positions
button_positionsy = [
    (button_y_spacing - 75),
    (button_y_spacing + 200),
    (button_y_spacing + 475)
]

button_positionsx = [
    (button_x_spacing),
    (button_x_spacing),
    (button_x_spacing)
]

# Drawing Star Function
def generate_star_points(center_x, center_y, outer_radius, inner_radius, points):
    star_points = []
    step = 2 * math.pi / points
    half_step = step / 2
    start_angle = -math.pi * 2 # Start the star with one point facing to the right

    for i in range(points):
        set_point = lambda angle, radius: (
            int(center_x + math.cos(angle - start_angle) * radius),
            int(center_y - math.sin(angle - start_angle) * radius)
        )
        outer_point_angle = i * step
        inner_point_angle = outer_point_angle + half_step
        star_points.append(set_point(outer_point_angle, outer_radius))
        star_points.append(set_point(inner_point_angle, inner_radius))

    return star_points

# Create the star points for each button
num_points = 5  # Number of points in the star
outer_radius = button_radius  # Outer radius of the star
inner_radius = button_radius * 0.5  # Inner radius of the star

# List for star points
button_star_points1 = generate_star_points(button_x_spacing, button_positionsy[0], outer_radius, inner_radius, num_points)
button_star_points2 = generate_star_points(button_x_spacing, button_positionsy[1], outer_radius, inner_radius, num_points)
button_star_points3 = generate_star_points(button_x_spacing, button_positionsy[2], outer_radius, inner_radius, num_points)
button_star_points = [button_star_points1, button_star_points2, button_star_points3]

def draw_centered_square(center_x, center_y, side_length):
    half_length = side_length / 2
    vertices = [
        (center_x - half_length, center_y - half_length),
        (center_x + half_length, center_y - half_length),
        (center_x + half_length, center_y + half_length),
        (center_x - half_length, center_y + half_length)
    ]
    return vertices

# List for square points
button_square_points1 = draw_centered_square(button_positionsx[0], button_positionsy[0], button_radius * 1.5)
button_square_points2 = draw_centered_square(button_positionsx[1], button_positionsy[1], button_radius * 1.5)
button_square_points3 = draw_centered_square(button_positionsx[2], button_positionsy[2], button_radius * 1.5)
button_square_points = [button_square_points1, button_square_points2, button_square_points3]

button_heart_points1 = []
button_heart_points2 = []
button_heart_points3 = []
num_points = 100  # Increase this value for a smoother heart shape
radius = button_radius

for i in range(num_points):
    angle = 2 * math.pi * i / num_points
    x1 = button_x_spacing + int(radius * (13 * math.cos(angle) - 5 * math.cos(2 * angle) - 2 * math.cos(3 * angle) - math.cos(4 * angle)) / 16)
    y1 = button_positionsy[0] + int(radius * math.sin(angle) ** 3)
    x2 = button_x_spacing + int(radius * (13 * math.cos(angle) - 5 * math.cos(2 * angle) - 2 * math.cos(3 * angle) - math.cos(4 * angle)) / 16)
    y2 = button_positionsy[1] + int(radius * math.sin(angle) ** 3)
    x3 = button_x_spacing + int(radius * (13 * math.cos(angle) - 5 * math.cos(2 * angle) - 2 * math.cos(3 * angle) - math.cos(4 * angle)) / 16)
    y3 = button_positionsy[2] + int(radius * math.sin(angle) ** 3)
    button_heart_points1.append((x1, y1))
    button_heart_points2.append((x2, y2))
    button_heart_points3.append((x3, y3))

button_heart_points = [button_heart_points1, button_heart_points2, button_heart_points3]

shapelist = [button_star_points, button_square_points, button_heart_points]

# Inputs
AnimalName = input("Animal Name: ")
trials = int(input("Number of trials: "))
target = int(input("Please choose the first target (star = 1, square = 2, heart = 3, yellow = 4, red/green = 5, blue = 6): " ))
target2 = int(input("Please choose the second target (star = 1, square = 2, heart = 3, yellow = 4, red/green = 5, blue = 6): " ))
target3 = int(input("Please choose the third target (star = 1, square = 2, heart = 3, yellow = 4, red/green = 5, blue = 6): " ))
target4 = int(input("Please choose the fourth target (star = 1, square = 2, heart = 3, yellow = 4, red/green = 5, blue = 6): " ))
target5 = int(input("Please choose the fifth target (star = 1, square = 2, heart = 3, yellow = 4, red/green = 5, blue = 6): " ))

targets = [target, target2, target3, target4, target5]

if target == 1:
    target_points  = button_star_points
    foil1_points  = button_square_points
    foil2_points  = button_heart_points
    color = False
elif target == 2:
    target_points  = button_square_points
    foil1_points  = button_star_points
    foil2_points  = button_heart_points
    color = False
elif target == 3:
    target_points  = button_heart_points
    foil1_points  = button_star_points
    foil2_points  = button_square_points
    color = False
elif target == 4:
    target_colour  = (255, 255, 000)
    foil1_colour = (255, 000, 000)
    foil2_colour = (000, 000, 204)
    foil = "red/green and blue"
    color = True
elif target == 5:
    target_colour = (255, 000, 000)
    foil1_colour  = (255, 255, 000)
    foil2_colour = (000, 000, 204)
    foil = "yellow and blue"
    color = True
elif target == 6:
    target_colour = (000, 000, 204)
    foil1_colour  = (255, 255, 000)
    foil2_colour = (255, 000, 000)
    foil = "yellow and red/green"
    color = True

# Setting up Camera
vidname = f"{AnimalName}_WCST_Step7_EDS&IDS_{datetime.now().strftime('%Y%m%d_%H%M%S')}_Video"

#def signal_handler(signal, frame):
#    print('Program exits normally.')
#    picam2.stop_recording()
#    picam2.stop()
#    os.system(f"ffmpeg -i {vidname}.h264 -vcodec copy {vidname}.mp4")
#    print("Save video sucessful.")
#    sys.exit(0)
#
#signal.signal(signal.SIGINT, signal_handler)
#picam2 = Picamera2()
#video_config = picam2.create_video_configuration(main={"size": (WIDTH, HEIGHT), "format": "RGB888"})
#picam2.configure(video_config)
#encoder = H264Encoder(10000000)
#picam2.start()
#picam2.set_controls({"FrameRate": FRAME_RATE})
#picam2.start_recording(encoder, f"{vidname}.h264")

# Initialize the screen
screen = pygame.display.set_mode((1080,720))

# Set the caption
pygame.display.set_caption("Marmoset Buttons")

# Set the counters
correctleft = 0
correctmiddle = 0
correctright = 0
incorrectleft = 0
incorrectmiddle = 0
incorrectright = 0
trialnum = 0
timeouts = 0
total_reward = 0
total_rewardtmp = 0
total_error = 0
total_errortmp = 0
totalresponse = 0
running_average = 0
targetindex = 0

# Set the lists
timelistleft = []
timelistmiddle = []
timelistright = []
summarysequence = []

# List of possible stimulus combinations  
stimlist =     [((1, 1, 1), (0, 2, 2), (2, 0, 0)), 
                ((1, 0, 0), (2, 1, 1), (0, 2, 2)), 
                ((1, 0, 1), (2, 2, 2), (0, 1, 0)), 
                ((2, 1, 2), (0, 2, 0), (1, 0, 1)), 
                ((2, 0, 2), (0, 1, 0), (1, 2, 1)), 
                ((1, 1, 0), (2, 2, 1), (0, 0, 2)), 
                ((0, 0, 1), (2, 2, 2), (1, 1, 0)), 
                ((0, 0, 0), (2, 1, 1), (1, 2, 2)), 
                ((0, 1, 1), (2, 2, 2), (1, 0, 0)), 
                ((2, 1, 0), (0, 2, 1), (1, 0, 2)), 
                ((2, 0, 0), (0, 1, 1), (1, 2, 2)), 
                ((2, 0, 1), (0, 2, 2), (1, 1, 0)), 
                ((1, 0, 0), (0, 1, 1), (2, 2, 2)), 
                ((1, 1, 0), (0, 2, 1), (2, 0, 2)), 
                ((0, 0, 2), (1, 1, 0), (2, 2, 1)), 
                ((2, 0, 2), (1, 1, 0), (0, 2, 1)), 
                ((2, 1, 2), (1, 2, 0), (0, 0, 1)), 
                ((1, 1, 2), (2, 2, 0), (0, 0, 1)), 
                ((2, 0, 0), (1, 1, 1), (0, 2, 2)), 
                ((2, 1, 1), (0, 2, 2), (1, 0, 0)), 
                ((0, 0, 1), (1, 2, 2), (2, 1, 0)), 
                ((0, 1, 0), (2, 2, 1), (1, 0, 2)), 
                ((1, 0, 2), (2, 1, 0), (0, 2, 1)), 
                ((0, 1, 0), (1, 2, 1), (2, 0, 2)), 
                ((2, 0, 1), (1, 2, 2), (0, 1, 0)), 
                ((1, 0, 2), (0, 1, 0), (2, 2, 1)), 
                ((1, 1, 2), (0, 2, 0), (2, 0, 1)), 
                ((0, 1, 2), (2, 2, 0), (1, 0, 1)), 
                ((1, 0, 1), (0, 2, 2), (2, 1, 0)), 
                ((0, 1, 1), (1, 2, 2), (2, 0, 0)), 
                ((2, 1, 0), (1, 2, 1), (0, 0, 2)), 
                ((2, 1, 1), (1, 2, 2), (0, 0, 0)), 
                ((0, 0, 2), (2, 1, 0), (1, 2, 1)), 
                ((0, 0, 0), (1, 1, 1), (2, 2, 2)), 
                ((0, 1, 2), (1, 2, 0), (2, 0, 1)), 
                ((1, 1, 1), (2, 2, 2), (0, 0, 0))]

datad = open("WCST_Step7_EDS&IDS_Stimuli.csv", 'w')
writer = csv.writer(datad)
writer.writerow(["Shape1", "Color1", "Shape2", "Color2", "Shape3", "Color3"])
for i in stimlist:
    writer.writerow([i[0][0], i[0][1], i[1][0], i[1][1], i[2][0], i[2][1]])
datad.close()

# Sequence of psuedorandom from 0 to 35
sequence = [20, 14, 29, 9, 23, 31, 11, 1, 28, 33, 
            3, 6, 0, 17, 35, 5, 26, 24, 22, 15, 
            2, 10, 34, 30, 8, 4, 12, 16, 7, 27, 
            25, 19, 13, 32, 21, 20, 14, 29, 9, 23, 
            31, 11, 1, 28, 33, 3, 6, 0, 17, 35, 
            5, 26, 24, 22, 15, 2, 10, 34, 30, 8, 
            4, 12, 16, 7, 27, 25, 19, 13, 32, 21]

sequence = sequence * 10

sequenceSaved = sequence

# Truncating the sequence for trial number
n = len(sequence)
for i in range(0, n - trials):
    sequence.pop()

# Binary history 0/1 for record keeping
historylist = []

# Setting up CSV title
thedatetime = datetime.now()
thetime = thedatetime.strftime("%H:%M:%S")
title = f"{AnimalName}_WCST_Step7_EDS&IDS_{datetime.now().strftime('%Y%m%d_%H%M%S')}.csv"

# Write headers to csv file
data = open(title, 'w')
writer = csv.writer(data)
writer.writerow(["Trial#", "Event Code", "Time"])

#Prep time
time.sleep(prep_time)

time_start = time.time()

# For loop parsing through sequence 
for i in sequence:

    trialnum += 1
    summarysequence.append(i)

    # Writing summary csv 
    if trialnum%10 == 0:
        if trialnum == 10:
            title2 = f"{AnimalName}_WCST_Step7_EDS&IDS_{datetime.now().strftime('%Y%m%d_%H%M%S')}_Summary.txt"
            summary = open(title2, "a+")
            summary.write(f"Trial Duration: {Trial_Duration}\n")
            summary.write(f"ITI: {ITI}\n")
        if len(timelistleft) == 0:
            meanleft = 0
        else:
            meanleft = sum(timelistleft) / len(timelistleft)
        if len(timelistmiddle) == 0:
            meanmiddle = 0
        else:
            meanmiddle = sum(timelistmiddle)  / len(timelistmiddle)
        if len(timelistright) == 0:
            meanright = 0
        else:
            meanright = sum(timelistright) / len(timelistright)
        summary.write(f"Completed Trials (saved every 10th): {trialnum}\n")
        summary.write("Sequence: " + str(summarysequence) + "\n")
        summary.write(f"Correct: {correctleft},{correctmiddle},{correctright}\n")
        summary.write(f"Incorrect: {incorrectleft},{incorrectmiddle},{incorrectright}\n")
        summary.write(f"Total Reward: {correctleft+correctmiddle+correctright}\n")
        summary.write(f"Total No Reponses: {timeouts}\n")
        summary.write(f"Mean Reaction Times: {meanleft}, {meanmiddle}, {meanright}\n")
        summary.write("------------------------------------------------------------\n")
    
    if (trialnum - timeouts) >= 11 and trialnum != 1:
        if (len(historylist) > 0):
            running_average = len([num for num in historylist[-10:] if num == 1])/len(historylist[-10:])
        if running_average >= 0.8:
            if targetindex < 4:
                targetindex += 1
            else:
                targetindex = 4
            target = targets[targetindex]
            if target == 4 or target == 5 or target == 6:
                color = True
            else:
                color = False
            if target == 1:
                target_points  = button_star_points
                foil1_points  = button_square_points
                foil2_points  = button_heart_points
            elif target == 2:
                target_points  = button_square_points
                foil1_points  = button_star_points
                foil2_points  = button_heart_points
            elif target == 3:
                target_points  = button_heart_points
                foil1_points  = button_star_points
                foil2_points  = button_square_points
            if target == 4:
                target_colour  = (255, 255, 000)
                foil1_colour = (255, 000, 000)
                foil2_colour = (000, 000, 204)
                foil = "red/green and blue"
            elif target == 5:
                target_colour = (255, 000, 000)
                foil1_colour  = (255, 255, 000)
                foil2_colour = (000, 000, 204)
                foil = "yellow and blue"
            elif target == 6:
                target_colour = (000, 000, 204)
                foil1_colour  = (255, 255, 000)
                foil2_colour = (255, 000, 000)
                foil = "yellow and red/green"
        
    # Delay between buttons
    screen.fill(screenfill)
    pygame.display.update()

    # ITI
    time_before = time.time()
    writer.writerow([trialnum, i, time_before - time_start]) #trial type and ITI onset
    ITInew = ITI
    while time.time() - time_before < ITInew:
        pygame.event.pump()
        if pygame.mouse.get_pressed()[0]:
            distance_button_0 = pygame.math.Vector2(button_x_spacing, button_positionsy[0]) - pygame.math.Vector2(pygame.mouse.get_pos())
            distance_button_1 = pygame.math.Vector2(button_x_spacing, button_positionsy[1]) - pygame.math.Vector2(pygame.mouse.get_pos())
            distance_button_2 = pygame.math.Vector2(button_x_spacing, button_positionsy[2]) - pygame.math.Vector2(pygame.mouse.get_pos())
            if distance_button_0.length() < button_radius:
                writer.writerow([trialnum, 210, time.time() - time_start])
            elif distance_button_1.length() < button_radius:
                writer.writerow([trialnum, 211, time.time() - time_start])
            elif distance_button_2.length() < button_radius:
                writer.writerow([trialnum, 212, time.time() - time_start])
            else:
                writer.writerow([trialnum, 216, time.time() - time_start])


    # Baseline with plus sign
    time_base = time.time()
    writer.writerow([trialnum, 100, time_base - time_start]) #plus onset
    while time.time() - time_base < plus:
        pygame.draw.rect(screen, black, pygame.Rect(button_x_spacing - 10, button_y_spacing + 200 - button_radius + 10, 20, button_radius*2 - 20))
        pygame.draw.rect(screen, black, pygame.Rect(button_x_spacing - button_radius + 10, button_y_spacing + 200 - 10, button_radius*2 - 20, 20))
        pygame.display.update()
        pygame.time.delay(100)
        pygame.event.pump()
        if pygame.mouse.get_pressed()[0]:
            distance_button_0 = pygame.math.Vector2(button_x_spacing,button_positionsy[0]) - pygame.math.Vector2(pygame.mouse.get_pos())
            distance_button_1 = pygame.math.Vector2(button_x_spacing,button_positionsy[1]) - pygame.math.Vector2(pygame.mouse.get_pos())
            distance_button_2 = pygame.math.Vector2(button_x_spacing,button_positionsy[2]) - pygame.math.Vector2(pygame.mouse.get_pos())
            if distance_button_0.length() < button_radius:
                writer.writerow([trialnum, 210, time.time() - time_start])
            elif distance_button_1.length() < button_radius:
                writer.writerow([trialnum, 211, time.time() - time_start])
            elif distance_button_2.length() < button_radius:
                writer.writerow([trialnum, 212, time.time() - time_start])
            else:
                writer.writerow([trialnum, 216, time.time() - time_start])

    screen.fill(screenfill)
    pygame.display.update()

    # Starts Timer 
    start_time = time.time()
    reward = 0
    
    # Writing the button in csv file
    timedisplay = time.time()
    writer.writerow([trialnum, 110, timedisplay - time_start])

    # Loops while button isn't correct 
    while time.time() < start_time + Trial_Duration:
        if reward == 1:
            break
        
        # Draws the button
        if color:
            if stimlist[i][0][1] + 1 == target - 3:
                pygame.draw.polygon(screen, target_colour, shapelist[stimlist[i][0][0]][stimlist[i][0][2]])
                pygame.draw.polygon(screen, colourlist[stimlist[i][1][1]], shapelist[stimlist[i][1][0]][stimlist[i][1][2]])
                pygame.draw.polygon(screen, colourlist[stimlist[i][2][1]], shapelist[stimlist[i][2][0]][stimlist[i][2][2]])
                targetlocation = stimlist[i][0][2]
            elif stimlist[i][1][1] + 1 == target - 3:
                pygame.draw.polygon(screen, target_colour, shapelist[stimlist[i][1][0]][stimlist[i][1][2]])
                pygame.draw.polygon(screen, colourlist[stimlist[i][0][1]], shapelist[stimlist[i][0][0]][stimlist[i][0][2]])
                pygame.draw.polygon(screen, colourlist[stimlist[i][2][1]], shapelist[stimlist[i][2][0]][stimlist[i][2][2]])
                targetlocation = stimlist[i][1][2]
            elif stimlist[i][2][1] + 1 == target - 3:
                pygame.draw.polygon(screen, target_colour, shapelist[stimlist[i][2][0]][stimlist[i][2][2]])
                pygame.draw.polygon(screen, colourlist[stimlist[i][1][1]], shapelist[stimlist[i][1][0]][stimlist[i][1][2]])
                pygame.draw.polygon(screen, colourlist[stimlist[i][0][1]], shapelist[stimlist[i][0][0]][stimlist[i][0][2]])
                targetlocation = stimlist[i][2][2]
            pygame.display.update()
        else:
            if stimlist[i][0][0] + 1 == target:
                pygame.draw.polygon(screen, colourlist[stimlist[i][0][1]], target_points[stimlist[i][0][2]])
                pygame.draw.polygon(screen, colourlist[stimlist[i][1][1]], shapelist[stimlist[i][1][0]][stimlist[i][1][2]])
                pygame.draw.polygon(screen, colourlist[stimlist[i][2][1]], shapelist[stimlist[i][2][0]][stimlist[i][2][2]])
                targetlocation = stimlist[i][0][2]
            elif stimlist[i][1][0] + 1 == target:
                pygame.draw.polygon(screen, colourlist[stimlist[i][1][1]], target_points[stimlist[i][1][2]])
                pygame.draw.polygon(screen, colourlist[stimlist[i][0][1]], shapelist[stimlist[i][0][0]][stimlist[i][0][2]])
                pygame.draw.polygon(screen, colourlist[stimlist[i][2][1]], shapelist[stimlist[i][2][0]][stimlist[i][2][2]])
                targetlocation = stimlist[i][1][2]
            elif stimlist[i][2][0] + 1 == target:
                pygame.draw.polygon(screen, colourlist[stimlist[i][2][1]], target_points[stimlist[i][2][2]])
                pygame.draw.polygon(screen, colourlist[stimlist[i][1][1]], shapelist[stimlist[i][1][0]][stimlist[i][1][2]])
                pygame.draw.polygon(screen, colourlist[stimlist[i][0][1]], shapelist[stimlist[i][0][0]][stimlist[i][0][2]])
                targetlocation = stimlist[i][2][2]
            pygame.display.update()
       
        # Checks when screen is touched 
        for event in pygame.event.get():
            click = pygame.mouse.get_pressed()[0]
            if click == 1:
                click = 0

                # Distance between point touched and button 
                distance_button = pygame.math.Vector2(button_x_spacing, button_positionsy[targetlocation]) - pygame.math.Vector2(pygame.mouse.get_pos())

                # Checks if distance is within button 
                if distance_button.length() < button_radius:
                    
                    timecorrect = time.time()
                    timedifference = timecorrect - timedisplay

                    # Counts which buttons were pressed 
                    if targetlocation == 0:
                        timecorrect = time.time()
                        timedifference = timecorrect - timedisplay
                        timelistleft.append(timedifference)
                        correctleft += 1
                    elif targetlocation == 1:
                        timecorrect = time.time()
                        timedifference = timecorrect - timedisplay
                        timelistmiddle.append(timedifference)
                        correctmiddle += 1
                    elif targetlocation == 2:
                        timecorrect = time.time()
                        timedifference = timecorrect - timedisplay
                        timelistright.append(timedifference)
                        correctright += 1
                    
                    historylist.append(1)
                    timecorrect = time.time()
                    writer.writerow([trialnum, 150, timecorrect - time_start])

                    # Reward
                    #time.sleep(rewardDelay) #to give time to motor 'oops' signal
                    #timereward = time.time()
                    #writer.writerow([trialnum, 200, timereward - time_start])
                    #GPIO.output(rewardpin,GPIO.HIGH)
                    #time.sleep(rewards_size)
                    #GPIO.output(rewardpin,GPIO.LOW)
                    reward = 1
                    break 

                # Counts when touch was outside of button 
                elif distance_button.length() > button_radius:
                    historylist.append(0) 
                    distance_button_0 = pygame.math.Vector2(button_x_spacing,button_positionsy[0]) - pygame.math.Vector2(pygame.mouse.get_pos())
                    distance_button_1 = pygame.math.Vector2(button_x_spacing,button_positionsy[1]) - pygame.math.Vector2(pygame.mouse.get_pos())
                    distance_button_2 = pygame.math.Vector2(button_x_spacing,button_positionsy[2]) - pygame.math.Vector2(pygame.mouse.get_pos())
                    if distance_button_0.length() < button_radius:
                        incorrectleft += 1
                        timenow = time.time()
                        writer.writerow([trialnum, 210, timenow - time_start])
                    elif distance_button_1.length() < button_radius:
                        incorrectmiddle += 1
                        timenow = time.time()
                        writer.writerow([trialnum, 211, timenow - time_start])
                    elif distance_button_2.length() < button_radius:
                        incorrectright += 1
                        timenow = time.time()
                        writer.writerow([trialnum, 212, timenow - time_start])       
                    break

        # Time out for 15 seconds 
        seconds = (time.time() - start_time)
        if seconds >= Trial_Duration:
            timeouts +=1
            timenow = time.time()
            writer.writerow([trialnum, 250, timenow - time_start])
            break

# Closing objects 
data.close()
summary.close()
print(sequenceSaved)
#GPIO.cleanup()

当在按钮内的任何其他位置检测到鼠标单击时,它就会中断。然而,代码并没有被破坏。当它到达正确的位置时它确实会破裂,但我似乎无法弄清楚为什么在这种情况下它没有破裂。我的其他代码工作正常并使用相同的逻辑。

python for-loop break
1个回答
0
投票

根据我的理解,似乎您正在打破 pygame 中的事件检查器循环,它不会打破整个游戏循环,并在游戏循环的下一次迭代中重新执行。 @yak 在另一个堆栈溢出页面上解释了如何打破整个循环:

for a in xrange(10):
  for b in xrange(20):
    if something(a, b):
        # Break the inner loop...
        break
else:
    # Continue if the inner loop wasn't broken.
    continue
# Inner loop was broken, break the outer.
break
© www.soinside.com 2019 - 2024. All rights reserved.