2011-12-20 2 views
0

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

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) 

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

Что я делаю неправильно? Thanks

+0

вы можете создавать 'getSTartSTate()' код? – dm03514

ответ

5

is тесты для идентификации, а не равенства. Вы хотите current != problem.getStartState()

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

+0

Спасибо, понял мою проблему, но я не понял - как получилось, что это сработало на двух кортежах полей, как я уже говорил? – RanH

+3

@antisane: К сожалению, для учащихся (но, к счастью, для потребления памяти) интерпретатор принимает несколько ярлыков и иногда использует неизменные объекты, когда это возможно. Маленькие целые числа имеют одинаковую «проблему». Не полагайтесь на это. – delnan

+0

@antisane: кроме того, разные интерпретаторы python ведут себя по-разному. Например, «(2,3) is (2,3)» возвращает False на мой python 2.7.1, но True на моем pypy 1.7.0. – DSM

2
while current != problem.getStartState(): 

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

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

-1

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

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

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

веселит,

Смежные вопросы