2014-10-24 2 views
0

У меня есть функция f(x,y), и я хочу повторить ее несколько раз и построить результирующие точки. То, что я сделал это:Функция не возвращает список, и Sage не заносит в нее

def orbita(p,n): 
    a = [p] 
    for i in range(n-1): 
     p = f(p[0],p[1]) 
     a.append(p) 
    print a 

Применительно к точке p = (1,2) и попросил n = 5 итераций, эта функция возвращает следующее:

[(1, 2), (2, 5/2), (5/2, 29/20), (29/20, 1241/1450), (1241/1450, 7285162/5218405)] 

Который является правильным. Однако, когда я пытаюсь построить этот список точек на point(orbita((1,2),5)), я просто получаю пустой сюжет.

Сначала я подумал, что это связано с тем, что point() отображает «одну точку (как кортеж), список точек, одно комплексное число или список комплексных чисел», here, потому что я проверил type(orbita((1,2),5)) и получил NoneType. Однако, когда я попытался присвоить список переменной L = orbit((1,2),5), моя переменная пуста, так как ввод L ничего не возвращает, поэтому я больше не уверен, если это проблема. Если я скопировать список и написать:

point([(1, 2), (2, 5/2), (5/2, 29/20), (29/20, 1241/1450), (1241/1450, 7285162/5218405)]) 

Участок отлично работает, но я хотел бы использовать эту функцию для построения по крайней мере несколько сотен пунктов, так что я не хотел бы, чтобы скопировать их каждый раз. Я новичок в Sage и Python, поэтому я действительно не знаю, что я делаю неправильно на любом уровне.

Как распечатать результат функции orbita(p,n) или как его изменить, чтобы набрав point(orbita(p,n)) Я получу участок?

ответ

2

Это ваша проблема.

эта функция возвращает следующее:

Нет, это не так. Это печатает следующее. Как вы правильно идентифицируете, он возвращает None. Таким образом, вы должны иметь его список кортежей. Похоже, что у вас много опыта в Python, чтобы выяснить, как это сделать, поэтому я не буду включать подробные сведения, но, пожалуйста, продолжайте следить, если у вас все еще есть проблемы.

+0

(Кстати, на этом сайте типично иметь «минимальный рабочий пример», хотя в этом случае не имело значения, что такое 'f'.) – kcrisman

+0

Теперь работайте, спасибо! Давным-давно я использовал C, и я вспомнил, что 'print' был более полезным, чем' return', я думаю, это не всегда так на других языках. –

+0

Он часто * * полезен! Просто не то же самое. Действительно, в Python возвращаемый объект выглядит совсем не так, как печатное представление этого объекта - попробуйте сделать очень большую матрицу в Sage, например. – kcrisman

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

  • Нет связанных вопросов^_^