Как получить истекшее время при взаимодействии с другими функциями в текстовом приложении в 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'
ветка. Достаточно просто исправить, просто переместите это на несколько строк вверх.- Все ваши переменные объявлены внутри функции - это означает, что они не существуют вне ее, и они не сохраняются между вызовами. У вас есть три (разумных) варианта, чтобы это исправить:
- Объявите их все глобально (в верхней части функции, например,
global elapsed_home
, - Каждый раз передавайте их как аргументы. Верните их все каждый раз.
- Используйте класс для их хранения, сделайте его методом для этого класса вместо функции.
- Объявите их все глобально (в верхней части функции, например,
Сделайте ваш выбор.