неожиданный результат с выражением назначения

#python

Вопрос:

Я написал этот код, чтобы попробовать выражение присваивания:

 foods= list()
   while food := input("your food?:") != "q":
    foods.append(food)
else:
    print(foods)
 

но после ввода сучи и риса после запуска результат был

 [True, True]
 

На самом деле ис не ожидал такого результата. Вы можете объяснить??

Ответ №1:

!= Оператор имеет приоритет перед := оператором (фактически, каждый другой оператор имеет приоритет перед := ним ). Таким образом, условное условие заканчивается так

 while food := (input("your food?:") != "q"):
 

скорее, чем

 while (food := input("your food?:")) != "q":
 

Используйте вместо этого последнюю версию, и с вами все будет в порядке.

Ответ №2:

Порядок операций. Он добавляется input() != 'q' , вот почему вы получаете True . Вы можете изменить свой цикл на этот:

 while (food := input("your food?:")) != "q":
 

Ответ №3:

Это добавление результата input("your food?:") != "q" в список, а не ваших входных данных.