2014-12-04 3 views
0

Я пытаюсь перевести Polynomial({4:5,6:7,100:10}) в питоне, чтобы дать мне чистую вывод формыСоздание хорошего полиномиальное представления из словаря в Python

[out]: 10*X^100 + 7*X^6 + 5*X^4 

в виде строки.

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

Например, если настройка I словаря, например, как описано выше dictionary = {4:5,6:7,100:10} и я выполнить печать в подобие

for exponent in dictionary: 
    print exponent 

Я получаю выход 100,4,6. Это не очень интуитивно для меня. Однако я заглянул в модуль operator и некоторые подобные вопросы на этом сайте и придумал следующий фрагмент кода.

import operator 

class Polynomial(object): def __init__(self, polynom = {}): self.polynom = polynom self.poly_string = self.nicePolynom(polynom)

def __str__(self): 
    return self.poly_string 

def nicePolynom(self, polynom): 
    sorted_polynom = sorted(polynom.items(), key=operator.itemgetter(0)) 
    sorted_polynom.reverse() 


    for element in sorted_polynom: 
     exponent = str(element[0]) 
     coefficient = str(element[1]) 

     term = coefficient + "*X^" + exponent 
     print term  
    return term 

Что делает в основном то, что я хочу. Однако я не знаю, как это сделать. Мой выходной ток (индуцированный зачаточный оператор печати в коде) является

10*X^100 
7*X^6 
5*X^4 

и, конечно, оператор возврата, который только оценивает 5 * X^4. Я хочу, чтобы вышеприведенный вывод был в одной строке и имел «+» между ними так же, как в приведенном выше примере вывода. Однако, не написав очень очень уродливый код (уродливый, чем выше), я не могу это сделать.

ответ

3

Я не знаю, что библиотека вы используете, чтобы получить ваши Полиномиальные объекты, но при условии, что это подклассы ДИКТ со всеми обычными методами, и я вас понял, я верю, что вы пытаетесь сделать это:

>>> d = {4:5, 6:7, 100:10} 
>>> ' + '.join(('%s*x^%s' % (c, e) for e, c in d.items())) 
'10*x^100 + 5*x^4 + 7*x^6' 

Ломая, что немного вниз для вас:

  • d.items() возвращает список кортежей (key, value) для Dict д.
  • '%s*x^%s' % (c, e) форматирует кортеж: с * х^е [с = коэффициент, е = показатель степени]
  • ' + '.join(...) помещает все это вместе с знаками плюс между ними.

Обратите внимание, что в Python, как и всегда, заказ dict не гарантируется. Если вы хотите, чтобы они были в стандартной форме, вам нужно выполнить какую-то сортировку.

0

Если вам нравится это очень короткий:

class Polynomial(dict): 

    def __str__(self): 
     return ' + '.join("{}*X^{}".format(self[exp], exp) 
          for exp in sorted(self, reverse=True)) 


>>> print Polynomial({4:5,6:7,100:10}) 
'10*X^100 + 7*X^6 + 5*X^4' 
Смежные вопросы