2014-09-03 4 views
-1

Я пытаюсь написать программу python, в которой пользователь вводит многочлен и вычисляет производную. Мой текущий код:Производные более высокого порядка

print ("Derviatives: ") 
k5 = raw.input("Enter 5th degree + coefficent:  ") 
k4 = raw.input("Enter 4th degree + coefficent:  ") 
k3 = raw.input("Enter 3rd degree + coefficent:  ") 
k2 = raw.input("Enter 2nd degree + coefficent:  ") 
k1 = raw.input("Enter 1st degree + coefficent:  ") 
k0 = raw.input("Enter constant: ") 
int(k5) 
int(k4) 
int(k3) 
int(k2) 
int(k1) 
int(k0) 
print (k5, " ", k4, " ", k3, " ", k2, " ", k1, " ", k0) 
1in = raw.input("Correct Y/N?") 
if (1in != Y) 
    k5 = raw.input("Enter 5th degree + coefficent:  ") 
    k4 = raw.input("Enter 4th degree + coefficent:  ") 
    k3 = raw.input("Enter 3rd degree + coefficent:  ") 
    k2 = raw.input("Enter 2nd degree + coefficent:  ") 
    k1 = raw.input("Enter 1st degree + coefficent:  ") 
    k0 = raw.input("Enter constant: ") 

else 
    """CODE GOES HERE""" 

Я только начинающуюся питон программист, так что я все еще немного нечеткий на некоторых основных вопросах синтаксиса. Есть ли библиотеки, которые я должен импортировать?

+1

Я думаю, что потратить время, тщательно работая через учебник по языку, будет хорошей инвестицией. Пока вы на нем, я бы рекомендовал читать данные типа 'list'. – NPE

+0

Что касается ответа на ваш реальный вопрос: нет, нет каких-либо библиотек, которые вам нужны (на данный момент, возможно, когда ваша программа расширится, вам могут понадобиться). Но есть много грамматических (синтаксических) ошибок. Начните меньше и попробуйте запустить программу каждый раз, когда вы что-то добавляете к ней. – Evert

+1

У вас есть синтаксические ошибки, и вам очень нужно научиться цитировать и использовать списки, но то, что вам пока не нужно, требует дополнительного импорта. – jonrsharpe

ответ

0

Использование SymPy:

Поместите эти две линии в верхней части:

from sympy import * 
import numpy as np 

И эти в части "" "КОД ЗДЕСЬ" ""

x = Symbol('x') 
y = k5*x**5 + k4*x**4 + k3*x**3 + k2*x**2 + k1*x +constant 
yprime = y.diff(x) 
yprime 
+0

Я предполагаю, что это своего рода домашнее задание, он делает, поэтому он должен реализовывать алгоритм вручную, не просто называя доступные библиотеки. – drdaeman

1

OK, используйте raw_input вместо raw.input. Он встроен, как и int, поэтому ничего не нужно импортировать. При преобразовании в целое число (int) вам нужно присвоить результат, или ничего не изменится. Вы можете связать функции и использовать k5 = int(raw_input("prompt.. ")). Кроме того, как указывает Evert, имена переменных не могут начинаться с цифр, поэтому 1in необходимо будет изменить. Этот код должен работать:

print("Derviatives: ") 
k5 = raw_input("Enter 5th degree + coefficent:  ") 
k4 = raw_input("Enter 4th degree + coefficent:  ") 
k3 = raw_input("Enter 3rd degree + coefficent:  ") 
k2 = raw_input("Enter 2nd degree + coefficent:  ") 
k1 = raw_input("Enter 1st degree + coefficent:  ") 
k0 = raw_input("Enter constant: ") 
k5 = int(k5) 
k4 = int(k4) 
k3 = int(k3) 
k2 = int(k2) 
k1 = int(k1) 
k0 = int(k0) 
print(k5, " ", k4, " ", k3, " ", k2, " ", k1, " ", k0) 
in1 = raw_input("Correct Y/N?") 
if in1 != "Y": 
    k5 = raw_input("Enter 5th degree + coefficent:  ") 
    k4 = raw_input("Enter 4th degree + coefficent:  ") 
    k3 = raw_input("Enter 3rd degree + coefficent:  ") 
    k2 = raw_input("Enter 2nd degree + coefficent:  ") 
    k1 = raw_input("Enter 1st degree + coefficent:  ") 
    k0 = raw_input("Enter constant: ") 

else: 
    """CODE GOES HERE""" 

Также проверьте, какую версию python вы используете. Если это python 3, вам нужно изменить raw_input на input. Если вы используете python 2, вам не нужны скобки в операторах печати. Например. print("Derviatives: ") =>print "Derviatives: ".

+0

Этот код не будет работать: '1in' не является допустимой переменной. – Evert

0

Я вижу следующие вопросы с вашим кодом:

  1. Имена переменных Не может начинаться с цифры: 1in
  2. У вас неопределенная переменная Y. Я предполагаю, что вы хотите сравнить с строковым литералом, поэтому вместо этого напишите "Y".
  3. Скобки в операторе python if не нужны, но необходим задний длл. То же самое касается else.
  4. Список коэффициентов, безусловно, будет лучшим подходом, чем набор переменных.
  5. Это raw_input, не raw.input
  6. Хотя просто делает int(k5) бы проверить значение (поднять исключение, если строка не представляет целое число), он не будет влиять на переменном, так k5 будет по-прежнему содержать строку.

Угадайте, что это не помешает показать немного кода, так как я не выполняю здесь свою задачу (реализуя алгоритм), а просто отображая языковые функции. Итак ... Я бы сделал это как-то так:

# There are no do...while-style loops in Python, so we'll do it this way 
# loop forever, and break when confirmation prompt gets "y" 
while True: 
    k = [] # That's an empty list. 

    # I'm assuming Python 2.x here. Add parentheses for Python 3.x. 
    print "Derivatives:" 

    # This range will work like a list [5, 4, 3, 2, 1]. 
    for n in range(5, 1, -1): 
     k.append(int(raw_input("Enter {0}th degree + coefficient: ".format(n))) 

    ## Or you could do it this way: 
    #for num in ["5th", "4th", "3rd", "2nd", "1st"]: 
    # k.append(int(raw_input("Enter {0} degree + coefficient: ".format(num))) 

    k.append(int(raw_input("Enter constant: ".format(n))) 

    # Here's a bit tricky part - a list comprehension. 
    # Read on those, they're useful. 
    # We need the comprehension, because our list is full of ints, 
    # and join experts a list of strings. 
    print " ".join(str(x) for x in k) 

    ## If you didn't get the previous line - that's fine, 
    ## it's fairly advanced subject. Just do like you're used to: 
    #print k[0], " ", k[1], " ", k[2], " ", k[3], " ", k[4], " ", k[5] 

    # Oh, and did you notice 5th coeff. is at k[0]? 
    # That's because we appended them to the list in reverse order. 
    # Let's reverse the list in-place, so the constant will be k[0] and so on. 
    k.reverse() 

    # You don't always need an intermediate variable for single-use values, 
    # like when asking for confirmation. Just put raw_input call directly 
    # in if statement condition - it would work just fine. 
    # 
    # And let's be case-insensitive here and accept both "Y" and "y" 
    if raw_input("Correct [Y/N]? ").lower() == "y": 
     break 
+0

Но как мне сделать предел, связанный с f '(x)? –

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