Как получить истекшее время при взаимодействии с другими функциями в текстовом приложении в Python

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

import time

fk_range = range(0, 1000)
fk_list = list(fk_range)
ck_range = range(0, 1000)
ck_list = list(ck_range)


def body():
    while True:
        choice = input("")
        if choice == "fk":

            first_number_fk = fk_list[0]
            fk_list.remove(first_number_fk)
            number_fk = fk_list[0]
            string_number_fk = str(number_fk)
            print("Free Kick(s)", string_number_fk)

        elif choice == "ck":

            first_number_ck = ck_list[0]
            ck_list.remove(first_number_ck)
            number_ck = ck_list[0]
            string_number_ck = str(number_ck)
            print("Corner Kick(s): ", string_number_ck)

        if choice == "home team":
            start_home = time.time()
            input()
            end_home = time.time()
        if choice == "away_team":
            start_away = time.time()
            input()
            end_away = time.time()
            elapsed_home = end_home - start_home
            elapsed_away = end_away - start_away

        elif choice == "q":
            print(elapsed_away)
            print(elapsed_home)

body()

Это не работает, но это идея того, что у меня есть. Если вы не поняли, что я имею в виду, пожалуйста, прокомментируйте ниже, чтобы я мог объяснить более подробно.

2 ответа

Решение

Проверьте это

elapsed_home = 0
elapsed_away = 0
start_home = 0
start_away = 0
ball_home = False
ball_away = True # Assumimg that away team has the starting kick


def body():
    global elapsed_home, elapsed_away, start_home, start_away, ball_home, ball_away
    while True:
       choice = input("")
       ...
       ...
       if choice == "home team":
           if ball_home:
              continue:
           else:
              ball_away = False
              ball_home = True
              start_home = time.time()
              elapsed_away += time.time() - start_away
              print "away elapsed: " + str(elapsed_away)

       if choice == "away_team":
            if ball_away:
                continue
            else:
                ball_away = True
                ball_home = False
                start_away = time.time()
                elapsed_home += time.time() - start_home
                print "home elapsed: " + str(elapsed_home)
       ...
 # Initialize depending on who has the starting kick
 if ball_away:
     start_away = time.time()
 else:
     home_start = time.time()
 body()

Учитывая, что (как вы сказали в комментариях) этот код вызывается неоднократно в циклах, у вас есть две проблемы.

  • elapsed_home устанавливается в 'away_team' ветвь вместо 'home_team' ветка. Достаточно просто исправить, просто переместите это на несколько строк вверх.
  • Все ваши переменные объявлены внутри функции - это означает, что они не существуют вне ее, и они не сохраняются между вызовами. У вас есть три (разумных) варианта, чтобы это исправить:
    1. Объявите их все глобально (в верхней части функции, например, global elapsed_home,
    2. Каждый раз передавайте их как аргументы. Верните их все каждый раз.
    3. Используйте класс для их хранения, сделайте его методом для этого класса вместо функции.

Сделайте ваш выбор.

Другие вопросы по тегам