LINUX.ORG.RU

Помогите, пожалуйста, с питоном

 


0

1

Скрипт для замера времени реакции. Баг заключается в том, что в случае если клавиша будет нажата прежде чем вылетит смайл, то всё равно посчитает, а значит результат будет неверным.

from random import random
from time import sleep
from random import randrange
import os
if os.name == 'nt':
    from time import clock as tf
else:
    from time import time as tf
last = 0

def random_sleep(z = 3, x = 15):
    """Ставит на паузу выполнение скрипта на произвольное время, по умолчанию 3 - 15 секунд."""
    sleep(randrange(z, x) * random())

def reaction():
    """Часть функции reaction_measurement()"""
    start = tf()
    while True:
        keypress = input(':)')
        if keypress == "":
            global last
            last = tf() - start
            break
        else:
            print("Не попадаешь по клавишам?\n")

def reaction_measurement():
    """Замер времени реакции, необходим для команды 'run'."""
    print("Нажмите 'Enter' как только увидите этот ==> :) смайл")
    random_sleep()
    reaction()
    print(last)



while True:
    cmd = input("Пожалуйста, введите команду. Список доступных команд: run, last, show, clear, avg, hist, quit, help:\n")
    if cmd == 'quit' or cmd == 'q' or cmd == 'exit':
        print('Bye')
        break
    elif cmd == 'help':
        print("""
run     - запуск режима измерения времени реакции;
last    - показать последний результат;
show    - показать последние запомненные результаты;
clear   - очистить память результатов;
avg     - вывести среднее значение от запомненных результатов;
hist    - вывести гистограмму распределения значений реакции;
quit    - выход из интерпретатора.
              """)
    elif cmd == 'run':
        reaction_measurement()
    elif cmd == 'last':
        print(last)
    elif cmd == 'show':
        print('Ещё не реализовано')
    elif cmd == 'clear':
        print('Ещё не реализовано')
    elif cmd == 'avg':
        print('Ещё не реализовано')
    elif cmd == 'hist':
        print('Ещё не реализовано')
    elif cmd == 'debug':
        while True:
            debugcmd = input('Введите функцию для проверки работоспособности, stop для выхода из режима отладки:\n')
            if debugcmd == 'random_sleep':
                print(random_sleep.__doc__)
                print('Sleep')
                random_sleep(20)
                print('Wake')
                break
            elif debugcmd == 'reaction_measurement':
                print(reaction_measurement.__doc__)
                reaction_measurement()
                print = (last)
                break
            elif debugcmd == 'stop':
                break
            else:
                print('Имя функции введено неверно или функция не подлежит отладке')
    else:
        print('Введёные данные неверны')
Deleted

Сохраняй где-нибудь, на сколько у тебя была задержка. Потом проверяй если tf() < start+время_задержки. Значит нажал раньше.

pawnhearts ★★★★★
()
Последнее исправление: pawnhearts (всего исправлений: 1)
Ответ на: комментарий от pawnhearts

Да, это может сработать. Попробую.

Deleted
()
Ответ на: комментарий от grazor

Звучит как простой и действенный вариант, но не сложно ли будет расписать что тут за что отвечает?

UPD и к сожалению он не годится, хотя возьму на заметку. Просто можно будет долбить по enter, а тогда результат будет недостоверным.

Deleted
()
Последнее исправление: Romashev (всего исправлений: 1)
Ответ на: комментарий от Deleted

Тогда, менять логику, чтобы ожидание ввода не блокировало выполнение скрипта. Смотреть в сторону ncurses.

vvn_black ★★★★★
()

Помогите, пожалуйста

Не , не так надо было начать . Во :

Сами мы не местные ,

Помогите, пожалуйста, с питоном

anonymous
()
Ответ на: комментарий от anonymous

О, в первый раз я прошу со словом «пожалуйста» и уже какие-то левые шутки от анонимусов. Займись делом, шутник.

Deleted
()
Ответ на: комментарий от Deleted

Просто можно будет долбить по enter, а тогда результат будет недостоверным.

Опять же, чтобы исключить читерство типа «зажал клавишу Enter и ждёшь смайлик» надо отслеживать не нажатие, а отпускание клавиши Enter.

vvn_black ★★★★★
()
Ответ на: комментарий от vvn_black

надо отслеживать не нажатие, а отпускание клавиши Enter.

Для измерения скорости реакции? ORLY? Тут длин походу - оба события отслеживать надо. :(

anonymous
()
Ответ на: комментарий от anonymous

Не принимай это во внимание, это просто практика для набивания руки. По сути у нас остаётся проблема, а именно вообще нажатие клавиши, которое происходит не моментально. В идеальных условиях надо бы как-то измерять время реакции на раздражитель в целом, а это уже томография и не про питон. Просто пытаюсь закрепить материал про условия и функции. Ну плюс ещё спискота, словари или что там может быть.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.