2016-02-02 6 views
-1

Я очень новичок в написании кода Python. Я должен представить многочлен, подобный этому,Полиномиальные функции в python

4x^230+7x^96+1 

testP = [[4,512],[7,256],[1,0]] 

def printPoly2(P): 
    for i in range(len(P)): 
     if P[i] != 0: 
      print("%s x^%s + "%(P[i], i)), 
      print 

printPoly2(testP) 

, но мой ответ неправильный. Мне нужна помощь в этом.

+1

Я не делаю связи между вашим примером примера полинома и вашим представлением его как списком списков. Если testP не будет: [[4,230], [7,96], [1,0]]? –

+0

Я думаю, это должно быть. Но P в вашем методе - список списков. Таким образом, P [i] возвращает список, и вы сравниваете его с! = 0, что не имеет смысла. – Rainer

+0

Распаковка списка списков следующим образом должна дать результаты, я думаю, что OP ищет 2 изменения, сначала предложение * if * может быть: if len (P [i])! = 0 И, во-вторых, следующий оператор печати как print ("% sx ^% s +"% (P [i] [0], P [i] [1])), –

ответ

0

Ваша проблема в заявлении на печать. При написании:

print("%s x^%s + "%(P[i], i)) 

Вы на самом деле печатаете весь кортеж. Например, P[0] равно всему списку [4, 512]. Поэтому при прямой печати P[i] вы просто печатаете весь подсписчик.

Вместо этого вы хотите напечатать каждый элемент в подсписке.

print("%s x^%s" % (P[i][0], P[i][1])) 


Кроме того, ваше решение как есть будет печатать каждую часть ответа на отдельной строке. Чтобы исправить это, у вас есть пара вариантов, но вот тот, который не зависит от версии python, которую вы имеете. В принципе, вы создаете строку, которая представляет ваш результат, и продолжайте строить ее по мере прохождения цикла. Затем в самом конце функции вы печатаете эту строку.

result = '' # initialize an empty string before your loop 

Затем внутри цикла заменить вызов печати с:

result = "%s + %s x^%s" % (result, P[i][0], P[i][1] 

И в самом конце функции вы можете напечатать строку.

print (result) 
+0

Большое вам спасибо! – tani

0

Я (надеюсь) улучшил ваш код с помощью некоторой пифонической магии. Теперь это список кортежей и использует автоматическую распаковку.

testP = [(4, 230), (7, 96), (1, 0)] 

def printPoly2(P): 
    for i, e in P: 
     if e != 0: 
      print("{} x^{} + ".format(i, e)) 

printPoly2(testP) 

Выводит

4 x^230 + 
7 x^96 + 
+1

Вам еще нужно напечатать постоянный член без 'x^0'. – chepner

+0

Большое вам спасибо! – tani

+0

@chepner Я тоже так думаю, но это было оригинальное сообщение ^^ tani, вы, возможно, должны добавить случай else и просто распечатать «i», – Rainer

0

Просто было больше 5 минут ... здесь вы идете

testP = [(4, 230), (7, 96), (1, 0)] 

def printPoly2(polynom): 
    parts = [] 
    for i, e in polynom: 
     parts.append(_format_polynome(i,e)) 

    print " + ".join(parts) 

def _format_polynome(i, e): 
    if e == 0: 
     return "{}".format(i) 
    else: 
     return "{} x^{}".format(i, e) 

printPoly2(testP) 
0

это как бы я написать этот код в чем-то я думаю, что это более вещий способ его использования:

def poly2(P): 
    result = [] 
    for item in P: 
     n, e = item 
     if e == 0: 
      result.append("1") 
     else: 
      result.append("{}x^{}".format(n, e)) 
    return " + ".join(result) 

# 4x^230 + 7x^96 + 1 
testP = [(4,230), (7,96), (1,0)] 
print poly2(testP) 

обратите внимание, что его более гибкое, чтобы вернуть строковое представление, чем распечатать его непосредственно из функции.

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