Функция некорректно возвращает объект класса

Есть такой класс:

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 шт):

Автор решения: S. Nick

А что я делаю не так и почему все получается?

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`для выхода: ')

введите сюда описание изображения

→ Ссылка