Функция некорректно возвращает объект класса
Есть такой класс:
class Player:
id=0
points=0
name=""
current_place=None
def __init__(self, id, name):
self.id=id
self.name=name
Также есть список players, в котором хранятся все объекты этого класса и заполняется он таким образом:
players=[]
while inp!="!fr":
inp=input()
if inp=="!fr": break
players.append(Player(n, inp))
n+=1
Таким образом, имеется список с определенным количеством этих объектов, каждый со своим именем. И для того чтобы по имени можно было найти в списке нужный объект и провести с ним работу я написал эту функцию:
def search_player_by_name(name):
for i in players:
if i.name==name:
return i
Тестирование показало что функция работает как надо, однако при выполнении реальной задачи все идёт не по плану.
Такой код:
inp=input()#Пользователь вводит данные в формате "Имя победителя + счёт (Max 2:1)
sinp=inp.split()#Разделяем ввод на имя и счёт
search_player_by_name(sinp[0]).points+=6
В моей голове все работало и данные строки должны добавлять 6 очков игроку с именем введённым пользователем ранее, однако компилятор со мной не согласен и выдает следующую ошибку:
AttributeError: 'NoneType' object has no attribute 'points'
Честно, не понимаю в чем может быть дело и уповаю на помощь других людей. Заранее спасибо!
Ответы (1 шт):
А что я делаю не так и почему все получается?
class Player:
id = 0
points = 0
name = ""
current_place = None
def __init__(self, id, name):
self.id = id
self.name = name
n = 0
players = []
while True:
inp = input('Введите имя игрока: ') # Max
if not inp or inp == "!fr":
break
players.append(Player(n, inp))
n += 1
#print(f'{players}\n')
def search_player_by_name(name):
for i in players:
if i.name == name:
return i
fl = 1
while fl and players:
inp = input('Введите данные в формвте `Max 2:1`: ') # Max 2:1
sinp = inp.split() # Разделяем ввод на имя и счёт
player = search_player_by_name(sinp[0])
if player:
player.points += 6
print(f'{player.name} === {player.points} \n') #
else:
print(f'Нет игрока с именем `{sinp[0]}`') #
fl = input('\nВведите `что-нибудь для продолэения или Enter`для выхода: ')
