python面向对象作业_python面向对象编程作业

展开全部

import re

class derivative:

def __init__(self,s):

self.s='+'+s if s[0] not in ['+','-'] else s

def __analysis__(self):

self.ite=list(re.finditer('[+-]',self.s))

self.items=[x for x in re.split(r'[+-]',self.s) if x!='']

self.pm=[self.s[i.span()[0]] for i in self.ite]

self.var=[k[k.find('^')-1] for k in self.items if k.find('^')>-1][0]

self.ratio=[]

self.power=[]

for item in self.items:

j=item.find('^')

k=item.find(self.var)

if j>-1:

self.power.append(int(item[j+1]))

elif k>-1:

self.power.append(1)

else:

self.power.append(0)

for item in self.items:

k=item.find('*')

if k>-1:

self.ratio.append(int(item[k-1]))

elif item.find(self.var)>-1:

self.ratio.append(1)

else:

self.ratio.append(int(item))

self.items=[t[1] for t in sorted(list(zip(self.power,self.items)),reverse=True)]

self.ratio=[t[1] for t in sorted(list(zip(self.power,self.ratio)),reverse=True)]

self.pm=[t[1] for t in sorted(list(zip(self.power,self.pm)),reverse=True)]

self.power.sort(reverse=True)

def __derivative__(self):

power=[x-1 if x>1 else 0 for x in self.power]

ratio=[]

for i in range(len(self.power)):

if self.power[i]>1:

ratio.append(self.power[i]*self.ratio[i])

elif self.power[i]==1:

ratio.append(self.ratio[i])

else:

ratio.append(0)

items=[]

for i in range(len(self.power)):

if ratio[i]==0:

continue

item=self.pm[i]

if ratio[i]>0:

item+=str(ratio[i])

if power[i]>0:

item+='*'+self.var

if power[i]>1:

item+='^'+str(power[i])

items.append(item)

self.out_s=''.join(items)

if self.out_s[0] == '+':

self.out_s=self.out_s[1:]

def der(self):

self.__analysis__()

self.__derivative__()

return self.out_s

s='2*x^3+3*x^2+5*x+1'

d=derivative(s)

print(d.der())

s='-5*x^6-3*x^3+12-4*x^4'

d=derivative(s)

print(d.der())

“不恰当的输入”不知道要处理什么级别的错误32313133353236313431303231363533e4b893e5b19e31333365646237,所以没搞。自己根据需求去搞吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值