Ниже приведены две версии одного и того же кода. Разница в том, что классы Team
и School
имеют значения по умолчанию при инициализации в неправильной версии, тогда как в правильной первой версии переменная инициализируется без ввода пользователя. Происходит что-то тонкое, что я не могу понять. Что является причиной неправильных результатов во второй версии?
Версия 1, она работает правильно:
# Player class
class Player:
# Complete the implementation
def __init__(self, ID, name, teamName):
self.ID = ID
self.name = name
self.teamName = teamName
# Team class contains a list of Player
# Objects
class Team:
# Complete the implementation
def __init__(self, name):
self.name = name
self.players = []
def addPlayer(self, player):
self.players.append(player)
def getNumberOfPlayers(self):
return len(self.players)
# School class contains a list of Team
# objects.
class School:
def __init__(self, name):
self.name = name
self.teams = []
def addTeam(self, team):
self.teams.append(team)
def getTotalPlayersInSchool(self):
player_count = 0
for team in self.teams:
player_count += team.getNumberOfPlayers()
return player_count
# Complete the implementation
# code to test the implementation
# remove backticks when you want to test the implemenation of your code
p1 = Player("Harris", 1, "Red");
p2 = Player("Carol", 2, "Red");
p3 = Player("Johnny", 1, "Blue");
p4 = Player("Sarah", 2, "Blue");
red_team=Team("Red Team")
red_team.players.append(p1)
red_team.players.append(p2)
blue_team=Team("Blue Team")
blue_team.players.append(p2)
blue_team.players.append(p3)
mySchool=School("My School")
mySchool.teams.append(red_team)
mySchool.teams.append(blue_team)
print("Total players in my school:", mySchool.getTotalPlayersInSchool())
Версия 1 дает следующие правильные результаты:
Total players in my school: 4
Complete the challenge.
Версия 2 работает некорректно:
# Player class
class Player:
# Complete the implementation
def __init__(self, ID, name, teamName):
self.ID = ID
self.name = name
self.teamName = teamName
# Team class contains a list of Player
# Objects
class Team:
# Complete the implementation
def __init__(self, name, players=[]):
self.name = name
self.players = players
def addPlayer(self, player):
self.players.append(player)
def getNumberOfPlayers(self):
return len(self.players)
# School class contains a list of Team
# objects.
class School:
def __init__(self, name, teams=[]):
self.name = name
self.teams = teams
def addTeam(self, team):
self.teams.append(team)
def getTotalPlayersInSchool(self):
player_count = 0
for team in self.teams:
player_count += team.getNumberOfPlayers()
return player_count
# Complete the implementation
# code to test the implementation
# remove backticks when you want to test the implemenation of your code
p1 = Player("Harris", 1, "Red");
p2 = Player("Carol", 2, "Red");
p3 = Player("Johnny", 1, "Blue");
p4 = Player("Sarah", 2, "Blue");
red_team=Team("Red Team")
red_team.players.append(p1)
red_team.players.append(p2)
blue_team=Team("Blue Team")
blue_team.players.append(p2)
blue_team.players.append(p3)
mySchool=School("My School")
mySchool.teams.append(red_team)
mySchool.teams.append(blue_team)
print("Total players in my school:", mySchool.getTotalPlayersInSchool())
Версия 2 дает следующие неверные результаты:
Total players in my school: 8
Complete the challenge.