如何在我的代码中编辑 self.TeamScore 值

How to edit the self.TeamScore value in my code

我正在尝试制作学校锦标赛的排行榜。我开始要求用户输入一些团队名称以及团队中有多少成员。现在我想问用户; 'who won the game?' 然后将球队得分调整为 1。

如何根据用户输入更改团队分数?

class AllTeams:
  def __init__(self, TeamNum, TeamName, TeamMembers,    TeamScore):
    self.TeamNum = TeamNum
    self.TeamName = TeamName
    self.TeamMembers = TeamMembers
    self.TeamScore = TeamScore

  def __repr__(self):
    return f'Team Number: {self.TeamNum} |-| Team Name: {self.TeamName} |-| Member Count: {self.TeamMembers} |-| Team Score: {self.TeamScore}'

#teams = [AllTeams(i+1, "N/A", 0) for i in range(20)]
teams = []

TeamCounter=int(input('How many Teams will be in the tournament? '))

print('')
for i in range(TeamCounter):
    NameOfTeam=input(f'Please Enter Team {i+1} Name: ')
    MemberCount=input('How Many Members in Team? ')
    print('')
    teams.append( AllTeams( i+1, NameOfTeam, MemberCount, 0) )

def score():
    for t in teams:
    print(t)

    GameWinner=input('Which Team Won the Event? ')

    #change team score by 1

您需要迭代团队以找到名字好听的团队来更新高分

def score(teams):
    winner = input('Which Team Won the Event? ')
    for team in teams:
        if team.name == winner:
            team.add_victory()
            break

然后更好的命名,class变成了

class Team:
    def __init__(self, num, name, size, score):
        self.num = num
        self.name = name
        self.size = size
        self.score = score

    def add_victory(self):
        self.score += 1

    def __repr__(self):
        return f'Team Number: {self.num} |-| Team Name: {self.name} |-| Member Count: {self.size} |-| Team Score: {self.score}'

考虑到您在这里的指导,我认为这有助于消除对 classes 的一些误解(或者我和其他人认为的误解)。

简而言之,一个class就是一个对象,它就像一个事物的表象。在您的情况下, Team 是一回事。它有成员数、姓名、号码等。因此您的 class 应该命名为“Team”而不是“AllTeams”。

以同样的方式,Game 是一个东西。它具有主队、客队、比赛日期、主队和客队的比分、场地等属性。它可能有一个使用比分的方法,如“WhoWon()”判断是主队还是客队获胜。

仔细想想,分数是一场比赛的属性,而不是一支球队的属性,这是有道理的,因为一支球队很可能会在锦标赛期间打多场比赛,并且每场比赛都会有不同的得分。在 Team.

中追踪会很痛苦

所以,考虑如下:

class Team:

    #setting this outside of a method allows us to get it or set it outside of the class in the main code like a "global" for the class.
    TeamName = ''

    def __init__(self, TeamNum, TeamName, TeamMembers):
        self.TeamNum = TeamNum
        self.TeamName = TeamName
        self.TeamMembers = TeamMembers

    def __repr__(self):
        return f'Team Number: {self.TeamNum} |-| Team Name: {self.TeamName} |-| Member Count: {self.TeamMembers} |-| Team Score: {self.TeamScore}'

class Game:
    
    def __init__(self, game_number, home_team, away_team, home_team_score, away_team_score):
        self.home_team = home_team
        self.away_team = away_team
        self.home_team_score = home_team_score
        self.away_team_score = away_team_score

    #a class method that returns the winner based on the scores
    def winner(self):
        if self.home_team_score > self.away_team_score:
            return self.home_team
        else:
            return self.away_team

#instead of lists, use dictionaries so you can refer to a game by its number, or a team by its name without having to jump through hoops. 
games={}
teams = {}

TeamCounter=int(input('How many Teams will be in the tournament? '))

print('')
for i in range(TeamCounter):
    NameOfTeam=input(f'Please Enter Team {i+1} Name: ')
    MemberCount=input('How Many Members in Team? ')
    print('')
    #Add to the teams dictionary.
    teams[NameOfTeam] = Team( i+1, NameOfTeam, MemberCount) 


#Lets collect info about the games in the tourny:
GameCounter=int(input("How many games are in the tournament?"))
for i in range(GameCounter):
    home_team = input("what was the name of the home team?")
    home_team_score = input("what was their score?")
    away_team = input("what was the name of the away team?")
    away_team_score = input("what was their score?")

    #create the game object
    this_game = Game(i, teams[home_team], teams[away_team], home_team_score, away_team_score)

    #Once we have this one game made we can see who won. Note that we call the method `winner()` for `this_game` object which returns a `Team` object for which we can get it's attribute `TeamName`: 
    print("It looks like "+this_game.winner().TeamName+" won the game!")

有一百万种方法可以做到这一点,但我觉得这会让你朝着正确的方向前进。