Python запускает if-case, который не должен! - PullRequest
0 голосов
/ 17 сентября 2010

У меня есть этот код:

def random_answerlist(self):
    self.li = []
    self.winning_button = random.randint(0, 3)
    i = 0
    while i < 20 and len(self.li) is not 4:
        if i == self.winning_button:
            self.li.append(self.flags[self.current_flag][0])
        else:
            new_value = self.random_value()
            if self.flags[new_value][0] not in self.li:
                self.li.append(self.flags[new_value][0])
        i += 1
    return self.li

Единственная проблема с ним заключается в том, что первый случай if может произойти несколько раз, что должно быть невозможно. Я искал хорошее объяснение этому и не могу найти ни одного.

О, я знаю, что код не самый лучший. Но я новичок в Python (всего месяц или около того) и думал, что это может сработать, но это не так!

Ребята, вы знаете, почему? =)

Ответы [ 2 ]

1 голос
/ 17 сентября 2010

Одной из очевидных проблем является использование is not для сравнения значений с len(self.li).Тесты is not и != не совпадают.is тесты на идентичность (это ссылки на один и тот же объект?), != тесты на равенство (имеют ли эти объекты одинаковое значение?).

Измените while на:

while i < 20 and len(self.li) != 4:

Это решает проблему?

0 голосов
/ 17 сентября 2010

Да, извините.

Я бросил курить, когда понял, что мне не хватает:

Проблема не в том случае, как вы, ребята, заявили. Проблема в том, что случай else генерируется случайным образом из того же списка, что и первый случай if. И тогда в список попадает то же значение, что и в первом случае if.

Вы не можете решить эту проблему, так как я не опубликовал весь код.

Ну, в любом случае, спасибо:)

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