Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 25, 2016 15:51:37

coverss
Зарегистрирован: 2016-12-22
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

UnboundLocalError: local variable 'B' referenced before assignment

При попытке найти dr(x^2,x^4,x) и dr(x^5,x^2,x)— все получается, но при попытке найти dr(x,x^2) возникает ошибка.
Если брать dr(x^2,x) то опять же - все работает.
Ошибка: File “”, line 1, in File “”, line 21, in dr UnboundLocalError: local variable ‘B’ referenced before assignment
Понимаю что проблема из-за того, что В не указана, но как бы я не старался убрать if - не получается. Но при совмещении else+if=elif s==o - ошибка исчезает, но dr(x,x^2) вообще не выводит ничего, пустая колонка.

 def dr(p,q,x=x):
    p=p*x^0
    q=q*x^0
    t=diff(q)
    u=p.degree(x)+1
    s=p.degree(x)-t.degree(x)
    o=s+1
    if s<0:
        print('The integral does not undertake in elementary functions')
    else:
        if s==0:
            A=var('A0')
        else:
            A=var(['A%d' %n for n in range(o)])
            r=sum([A[i]*(x^i) for i in range(o)])
            h=diff(r,x)+r*diff(q,x)-p
            l=diff(r,x)+r*diff(q,x)
            B=([l.coefficient(x,n) for n in range(u)])
            C=([p.coefficient(x,n) for n in range(u)])
        if o==1:
            t=solve((B[u-1]-C[u-1]==0),r)
            r=r.subs(t)
            print(r)
        else:
            z=[h.subs(x=n)==0 for n in range(u)]
            t=solve(z,A)
            l=len(t[0])
        if t[0][l-1]!=0:
            r=r.subs(t)
            print(r)
        else:
            print('The integral does not undertake in elementary functions')
dr(x^2,x^4,x)
dr(x^5,x^2,x)
dr(x,x^2)

Офлайн

#2 Дек. 25, 2016 18:30:02

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

UnboundLocalError: local variable 'B' referenced before assignment

 def dr(p,q,x=x)
Ээээээ….
что значит x=x, у вас же х не определен нигде ранее, так делать нельзя. Если вы хотите использовать значение по умолчанию, то должны это значение однозначно задать. Как-то так
 def dr(p,q,x=10)
или через константу
 SOME_VAL = 10
def dr(p,q,x=SOME_VAL)



Отредактировано FishHook (Дек. 25, 2016 18:31:08)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version