сравнивая кортежи в python - PullRequest
       19

сравнивая кортежи в python

0 голосов
/ 20 декабря 2011

У меня есть следующий фрагмент кода:

while current is not problem.getStartState():

        print "Current: ", current, "Start: ", problem.getStartState()

Теперь по какой-то причине сравнение не работает, вы можете увидеть в следующем выводе:

Current:  (3, 5, 0, 0, 0, 0) Start:  (4, 5, 0, 0, 0, 0)
Current:  (4, 5, 0, 0, 0, 0) Start:  (4, 5, 0, 0, 0, 0)

вы можете видеть, что хотя current такой же, как getStartState (), он входит в while. более того - когда-то это был кортеж из 2 полей (x, y), он работал нормально.

Что я делаю не так? Спасибо

Ответы [ 3 ]

5 голосов
/ 20 декабря 2011

is тесты на идентичность, а не равенство.Вы хотите current != problem.getStartState()

Существует идиома is (not) None, которая работает, потому что None гарантированно будет одиночным.Не используйте его для других типов, если вы действительно не имеете это в виду!

2 голосов
/ 20 декабря 2011
while current != problem.getStartState():

    print "Current: ", current, "Start: ", problem.getStartState()

is - тождественный (тот же объект) компаратор. В вашем случае вам нужен оператор равенства (или неравенства) (объекты с одинаковыми значениями).

0 голосов
/ 20 декабря 2011

- это - неправильная проверка, которую следует использовать в этом случае.Для сравнения двух кортежей просто используйте! = Или ==

, например, проблему можно решить следующим образом:

while current != problem.getStartState():   
        print "Current: ", current, "Start: ", problem.getStartState()

ура,

...