Присвоение переменной в выражениях

1

Вот мой код для генерации значений в последовательности fibonnacci ниже 10 000 000.

  3 fibs = [1,1]
  4 while((x = fibs[-1] + fibs[-2]) <= 10000000):
  5     fibs.append(x)

Я попытался выполнить присвоение x в стиле x в условии цикла while. К сожалению, python сказал мне, что это синтаксическая ошибка. Какое самое простое решение?

  • 0
    Какой учебник вы используете для изучения Python? Где вы видели такой код Python? Какая часть руководства по языку подразумевает, что это может сработать? Что заставило вас думать, что это был законный синтаксис?
Теги:

4 ответа

9
Лучший ответ

В Python назначение не является выражением и поэтому не имеет значения.

Простейшим решением является выполнение задания в первой части цикла:

fibs=[1,1]
while fibs[-1] <= 10000000:
   fibs.append(fibs[-1] + fibs[-2])
  • 3
    Черт возьми, мне нравится этот больше, чем мой собственный.
  • 0
    +1 за ссылку
Показать ещё 1 комментарий
3

В принципе:

fibs = [1]
x = 1

while(x <= 10000000):
  fibs.append(x)
  # It is not possible for "fibs" not to have
  # at least two elements by now
  x = fibs[-1] + fibs[-2]

(На самом деле одна из целей дизайна Python заключалась в том, чтобы избежать смешивания выражений и назначений, таких как C, поэтому нет x++, x--, который также является полу-часто задаваемым вопросом.)

2

Причина не допускать назначение в выражениях Python является обычной, труднодоступной ошибкой на других языках, вызванной этой конструкцией.

Пожалуйста, проверьте http://effbot.org/pyfaq/why-can-t-i-use-an-assignment-in-an-expression.htm

1
from functools import partial
from itertools import imap, islice, takewhile
import operator
fibs = [1, 1]
for x in takewhile(partial(operator.ge, 10000000),
                   imap(operator.add, fibs, islice(fibs, 1, None))):
    fibs.append(x)

Ой, подождите, вы сказали "простейший"? Тогда Nevermind.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню