问题来源:网友求助为什么要写这篇文章
今天刚好收到一位网友的问题求助,让我帮忙实现一个级差分佣的算法。
因为之前我写过一篇文章 小程序后端开发之《PHP级差分佣系统功能》
这位网友认真的看了我这篇文章,而又恰好最近他在开发关于级差分佣的功能。所以就到我博客主页来提问了。就是大概这么个经过。
问题的描述:九级订单分佣如果还有不了解什么是级差分佣的请点上面链接,看下我写的那篇文章。
我先把这位网友同学的问题大致描述下吧。
他开发的级差佣金分佣系统也是按每日订单的数量来分级返佣,所以佣金也是根据订单级别来设置的。只不过他开发的是Python程序。
下面是佣金分佣级别,以及每个级别的订单数量和具体佣金金额。
问题注意点及要求
1.比如某人的订单数是200,那么他的佣金是100*0.5+100*0.8=130元。
2.用python来实现
他想要达到的结果
问题分析:数轴定位分析向函数里传入一个当日某人的订单数,来计算应该给他分多少佣金。
这个问题确实和我写的文章有点类似
但也不是完全一样:因为从他的例子中可以看出,当一个人的订单数是200单时,0-100的订单是以0.5元/单来计算,而101-300的订单是按0.8元/单来计算的。
下面我们开始来用数轴分界和定位法分析,并用python代码来实现。
哪这个问题要怎么写代码呢?
首先我们定义一个函数differential(),并利用input向这个函数中传入当日订单数;
def differential(i): n = int(input('当日订单数:')) differential(n)
下面我们来实现这个函数里的功能:
我们先把等级所需的订单数设置为数组arr,作为分界数轴,方便后面来定位。
arr = [20000,10000,5000,2000,1000,600,300,100,0]
接下来把每个级别的佣金也用数组rat存入。
rat = [2,1.9,1.8,1.7,1.5,1.3,1.1,0.8,0.5]
可能有同学要问为什么arr rat 两个数组是倒序存入的。至于为什么是倒序。
这是因为接下来我们要用一个for 来从高级别向底级别定位,这样就可以实现数轴分界及定位分析。
举个例:
有某个人的当日订单数是200单,那我们怎么分析呢,是不是先判断这个200是在那个等级区间中,我们发现他在100-300这个区间,这时我们是不是开始计算在100-300这个区间应该分佣多少。
是不是200-100=100单,这样就可以算得这个区间的分佣为100*0.8=80元,而为什么是减100呢,是不是这100又是在区间0-100里面。然后根据这个区间来判断,这时我们是不是又可以算得0-100这个区间分佣金额为100*0.5=50元。这样我们就得到了总分佣为80+50=130元,所以我们是倒序定位分界数轴的,也就是先判断高级别,再判断低级别,现在应该明白了吧。
下面来看看这个for 要怎么写;
我们的分界数轴长度是9,所以我们要定位9次才能定位完所有级别。
for idx in range(0,9):
同时我们设置r 来接收最后累计的分佣金额。
接下来我们通过if来判断输入的值是不是在某个级别的区间上限外。
if i>arr[idx]:
如果是的话,我们开始计算在这个区间中的佣金。
r+=(i-arr[idx])*rat[idx]
为了看到过程,我们打印下。
print ((i-arr[idx])*rat[idx],i)
接下来是把输入的值往下个级别倒退,所以我们把arr[idx] 赋值给i
i=arr[idx]
最后把总佣金通过return 返回。
下面是整个代码:
#!/usr/bin/python3 def differential(i): arr = [20000,10000,5000,2000,1000,600,300,100,0] rat = [2,1.9,1.8,1.7,1.5,1.3,1.1,0.8,0.5] r = 0 for idx in range(0,9): if i>arr[idx]: r+=(i-arr[idx])*rat[idx] print ((i-arr[idx])*rat[idx],i) i=arr[idx] return r n = int(input('当日订单数:')) differential(n)结果输出:过程结果打印
上面的代码运行后将输出如下结果:
首页会要求输入当日订单数:比如输入200 当月订单数:200 80.0 200 50.0 100 130.0
也就是说:0-100的订单是以0.5元一单结算,佣金为50元,101-300之间的订单是以0.8元一单结算,佣金是80,最后总佣金为130。
问题总结:举一反三其实我们不难看出,这类问题都是通过数轴来进行分界的,然后我们定位到相应的分界数轴里面,就可以实现这类的算法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)