2015-02-22 1 views
2

Я написал эту функцию.Python. Нет способа сделать fast_float из None error

def f(t): 
    if 0<t<pi: 
    return 1 
    elif t==pi: 
    return 0 
    elif gp(pi)<t<2*pi: 
    return -1 

Когда я вычислить значение все в порядке, но когда я пытаюсь построить график я получаю «никоим образом не сделать fast_float от None» ошибки.

pl5 = plot(f(t),(0,3)) 
show(pl5) 

В чем проблема? Спасибо заранее.

+0

что немогу 'на вашем входе? –

+0

Это означает, что 't' не удовлетворяет ни одному из этих условий. У вас есть резерв по умолчанию в случае, если это произойдет? Если это так, добавьте 'return' в нижней части кода. – Vader

+0

Что должно 'f' вернуть, если' t' равно 'None'? – J0e3gan

ответ

3

Наиболее вероятная проблема заключается в том, что все три условия являются ложными, поэтому функция неявно возвращает None.

Например, что происходит, когда t == 0 или когда t >= 2*pi?

1

Это означает, что t не удовлетворяет ни одному из этих условий. У вас есть резерв по умолчанию в случае, если это произойдет? Если это так, добавьте return в нижней части кода.

def f(t): 
    if 0<t<pi: 
    return 1 
    elif t==pi: 
    return 0 
    elif gp(pi)<t<2*pi: 
    return -1 
    return -3 # if it's -3 you will know t is satisfying none of the previous conditions 
2

Единственный путь ваш код может не дать вам NameError, если t уже определен:

sage: pl5 = plot(f(t),(0,3)) 
--------------------------------------------------------------------------- 
NameError         Traceback (most recent call last) 
<ipython-input-36-1f9b723e1faf> in <module>() 
----> 1 pl5 = plot(f(t),(Integer(0),Integer(3))) 

NameError: name 't' is not defined 

Давайте предположим, что t является выражение. Тогда, так как аргументы оцениваются , прежде чем они прошли, вы на самом деле пытаетесь построить None, потому что ни одна из ветвей вашей функции не являются истинными для символического выражения:

sage: t = var("t") 
sage: print f(t) 
None 
sage: plot(None,(0,3)) 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-44-5b43a830d374> in <module>() 
----> 1 plot(None,(Integer(0),Integer(3))) 
[...] 
TypeError: no way to make fast_float from None 

Просто оставьте t Выключать, если вы хотите построить функцию. Заметьте, что я изменил диапазон от (0,3) до (0,6), поэтому мы хотя бы видим что-то интересное.

sage: pl5 = plot(f,(0,6)) 
sage: pl5.save("pl5.png") 

example picture


стороне: я не знаю, что ваш gp(pi) должен do-- есть на самом деле не нужно, чтобы получить Pari участие здесь. Просто используйте pi.

0

Ваша функция f возвращает None.

Причина в том, что когда все три условия не срабатывают, оператор возврата не задается вообще. В таких случаях Python вернет None.

Либо добавьте оператор возврата с числовым значением в конце f или измените условия, чтобы каждый случай был покрыт.

Чтобы предотвратить это, вы можете также выбрать (рекомендуется) (в таких случаях) всегда есть еще-часть (по крайней мере, когда вы не уверены, если покрыты все случаи):

if .... 
    ... 
elif ... 

... 
else: # all the rest will be caught here 
    return some_value