Путаница в Python по отношению к экземпляру класса - PullRequest
0 голосов
/ 14 октября 2018

[Класс игроков, которые принимают список, а затем приступают к поиску игрока с наибольшим количеством очков.]

class Player:

    def __init__(self, name, score):
        self.name = name
        self.score = score

    def best_score(list):
        i = 0

        while i < len(list):

            n = list[i]         #list[1] = (Bratt, 250)             #list[2] = Lisa 150
            s = list[i].score       #list 1. score = 250                #list[2].score = 150
            ace = list[0]           #homer 50                           #homer 50
            hs = 0

            if s > hs:          #if s(250>0):                       #if s(list[2].score) > hs(250): nothing suppsoed to happen
                ace = n         #ace(homer) = n(list1) aka bratt        #ace(bratt) != n because above
                hs = s          #hs(0) = s(list1) = 250             #hs(250) != list[2]150
                                #hs is now 250
            i += 1

        return ace

p1 = Player('Homer', 50) 
p2 = Player('Bart', 250) 
p3 = Player('Lisa', 150)

ls = [p1, p2, p3] 
best = Player.best_score(ls)

msg = '{} has the best score, with {} points!'.format(best.name, best.score) 
print(msg)  # Bart has the best score, with 250 points! 

По некоторым причинам мой код не возвращает наибольшее количество очков и имя игрока.Вместо этого он дает мне последние очки игрока и имя.Я попытался проверить это, пройдя через цикл, и все равно не имеет смысла, где я ошибся.

1 Ответ

0 голосов
/ 15 октября 2018

Мы можем сосредоточиться на этой части кода:

while i < len(list):
    hs = 0

    if s > hs:
        ace = n
        hs = s

Как написано, s > hs совпадает с s > 0, поэтому условие будет выполнено для всех элементов списка, которыеиметь оценку больше нуля.

Чтобы сохранить наибольшее значение, оно должно быть определено один раз перед входом в цикл, например:

hs = 0

while i < len(list):
    if s > hs:
        ace = n
        hs = s

С этим изменением значение hs будет сохраняться во время итераций цикла while и, в конце концов, будет сохранять лучший результат как hs.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...