Я пишу программу, в которую вы можете добавить домашнюю команду, команду гостей и результат игры. Я хочу, чтобы данные команд менялись в соответствии с этим, и большинство из них. Но я не могу изменить «очки», «разницу мячей» и «сыграть» (игры), чтобы измениться! Это код, который я написал до сих пор:Создание атрибутов, которые вычисляются со значением других атрибутов
class team:
def __init__(self, name, wins, drawn, losses, goals_for, goals_against):
self.name = name
self.wins = int(wins)
self.drawn = int(drawn)
self.losses = int(losses)
self.goals_for = int(goals_for)
self.goals_against = int(goals_against)
self.goals_difference = (self.goals_for - self.goals_against)
self.points = ((self.wins * 3) + self.drawn)
self.played = (self.wins + self.drawn + self.losses)
def __repr__(self):
return 'Name:{} P:{} W:{} D:{} L:{} GF:{} GA:{} GD:{} PTS:{}'.format(self.name, self.played, self.wins, self.drawn, self.losses, self.goals_for, self.goals_against, self.goals_difference, self.points)
detroit_red_wings = team("Detroit", 1, 0, 3, 4, 5)
los_angeles_kings = team("LA", 0, 1, 4, 3, 7)
toronto_maple_leafs = team("Toronto", 1, 2, 2, 3, 6)
teamlist = [detroit_red_wings, los_angeles_kings, toronto_maple_leafs]
print(teamlist)
class data_input:
def home_team_input(self):
home_team = input("Type in the home team: ")
for i in teamlist:
if i.name == home_team:
return i
def away_team_input(self):
away_team = input("Type in the away team: ")
for t in teamlist:
if t.name == away_team:
return t
def result_input(self):
goals_home_team = int(input("Type in the number of goals made by the home team: "))
goals_away_team = int(input("Type in the number of goals made by the away team: "))
return (goals_home_team, goals_away_team)
def adding_result():
home_team = data_input.home_team_input()
away_team = data_input.away_team_input()
goals_home_team, goals_away_team = data_input.result_input()
home_team.goals_for += goals_home_team
home_team.goals_against += goals_away_team
away_team.goals_for += goals_away_team
away_team.goals_against += goals_home_team
if goals_home_team > goals_away_team:
home_team.wins += 1
away_team.losses += 1
if goals_home_team < goals_away_team:
away_team.wins += 1
home_team.losses += 1
if goals_home_team == goals_away_team:
home_team.drawn += 1
away_team.drawn += 1
data_input = data_input()
adding_result()
print(teamlist)
Я написал указание для атрибутов в __init__
методе класса team
и как вы можете видеть точки зависит от wins
. Это все работает, когда я создаю объекты, но когда я вставляю результат новой игры, points
не изменяется (также нет played
или goals_difference
). Это меня удивляет, потому что другие атрибуты меняются, когда я ввожу результат игры в функцию input
.
Это сработало отлично! Большое вам спасибо!! –
Наличие отдельной функции обновления просто ужасно. Вычислительные результаты должны быть доступны через @properties или функции, чтобы они всегда были точными для текущего состояния других элементов. –
@SteveCohen хорошая точка, я не могу обновить свой ответ в данный момент, но я буду как можно скорее, я пытался быть простым, но в этом случае простота - это просто плохая практика. – miradulo