Запишите только первый результат в цикле while в психопи

Я хочу распечатать время начала пробного периода в файле журнала. Однако мне нужно записать в файл журнала в цикле while (таймер), что означает, что все, что я делаю в этом цикле, будет выполняться при каждом обновлении экрана.

Проблема в том, что я хочу записать в файл журнала только результат первого вызова clock.getTime(). Если я сделаю это:

while timer.getTime() >0: # while time isn't up (turns neg when time's up)
    for key in event.getKeys():
        if key in ['escape']:
            core.quit() # quit if they press escape

        timeText.draw(window)
        timeline.draw(window)
        cursorImage.draw(window)

        ## flip so it actually appears
        window.flip()
        OnsetTime = clock.getTime()
        logfile.write('OnsetTime, %s' % OnsetTime)

Я получаю кучу строк моего файла журнала, в которых говорится «OnsetTime» и время — по одной для каждого обновления.

Я хочу, чтобы был напечатан только первый, но я не уверен, как это сделать.


person Maria    schedule 26.08.2015    source источник


Ответы (2)


Это просто еще один способ сделать то, что предлагает CasualDemon, но я считаю его более элегантным (три строки кода для ведения журнала вместо 5):

def logOnsetTime():
    """Function which allows launching this code right after a window.flip()"""
    logfile.write('OnsetTime, %s' % clock.getTime())

window.callOnFlip(logOnsetTime)  # runs on first flip
while timer.getTime() >0: # while time isn't up (turns neg when time's up)
    for key in event.getKeys():
        if key in ['escape']:
            core.quit() # quit if they press escape

        timeText.draw(window)
        timeline.draw(window)
        cursorImage.draw(window)

        ## flip so it actually appears.
        window.flip()

Если вам нужен журнал для каждого нажатия клавиши, поместите window.callOnFlip(logOnsetTime) в цикл while. Существует также метод window.logOnFlip специально для ведения журнала, но он просто сохраняет входную строку в журнал с отметкой времени по глобальным часам, поэтому он не будет экономить время вашего clock.

person Jonas Lindeløv    schedule 26.08.2015
comment
Очень приятное улучшение! Я никогда не пользовался психопией и не думал, что у них будет что-то специальное для этого, очень полезное для изучения. - person CasualDemon; 27.08.2015

Я думаю, вы хотите что-то вроде этого:

while timer.getTime() >0: # while time isn't up (turns neg when time's up)
    first = True
    for key in event.getKeys():
        if key in ['escape']:
            core.quit() # quit if they press escape

        timeText.draw(window)
        timeline.draw(window)
        cursorImage.draw(window)

        ## flip so it actually appears
        window.flip()
        OnsetTime = clock.getTime()
        if first:
            logfile.write('OnsetTime, %s' % OnsetTime)
            first = False

Однако, если вам нужен только самый первый, вместо этого first = True должен быть вне цикла While.

person CasualDemon    schedule 26.08.2015