python 学习记录-根据提成计算奖金

题目:企业发放的奖金根据利润提成。利润低于或等于10万元时,奖金可提10%;利润高于10万,低于20万,低于10万的部分按10%提成,高于10万的部分,可提成7.5%;20万到40万之间时,高于20万的部分,可提成5%;40万到60万之间时高于40万的部分,可提成3%;60万到100万之间,高于60万的部分,可提成1.5%;高于100万时,超过100的部分按1%提成,从键盘输入当月利润,求应发奖金数?

相关函数:

1、range()----创建应整数列表,常用于for循环

语法:range(start,stop[,step])

参数说明:

start:计数从start开始,默认是从0开始;stop:计数到stop结束,但不包括stop。如range(0,4)是[0,1,2,3]  ;step:步长,默认是1。如range(0,6)等价于range(0,6,1)

2、sum()-----求和函数

语法:sum(iterable[,start])

参数说明:

iterable:可迭代对象,如列表、元祖、集合; start:指定相加的参数,如果没有设置这个值,默认是0;

3、map()

语法:map(function,iterable,...)

需传入一个函数,这个函数可以是内置的,也可以自定义或匿名函数;第二个参数时可迭代对象,如列表、字符串等。返回的是一个map对象,注意不是列表不能直接输出,可以通过for循环或者list()来显示。

4、lambda()----匿名函数

语法:lambda arg1,arg2,。。。,argN:expression

5、zip()---将可迭代的对象作为参数,将对象中对应的元素打包成一个个元祖,然后返回有这些元祖组成的对象,我们可用list()转换来输出列表

语法:zip(iterable,。。。)

 

代码:

 

w=int(input('输入利润: '))
p=[1000000,600000,400000,200000,100000,0]
t=[0.01,0.015,0.03,0.05,0.075,0.1]
r=[400000,200000,200000,100000,100000]
for j in range(len(p)):
    if w >p[j]:
        v1=(w-p[j])*t[j]
        print(v1)
        p_new=p[j+1:6]
        r_new=r[j:5]
        v2=sum(map(lambda x,y:x*y,zip(p_new,r_new)))
        print(v2)
        print(v1+v2)
        break

运行提示:

    v2=sum(map(lambda x,y:x*y,zip(p_new,r_new)))
TypeError: <lambda>() missing 1 required positional argument: 'y'

但若改为v2=sum(map(lambda(x,y):x*y,zip(p_new,r_new)))也不行,

会提示:    v2=sum(map(lambda (x,y):x*y,zip(p_new,r_new)))
                      ^
SyntaxError: invalid syntax

 

最后写了一个简单易懂的

w=int(input('请输入当月利润,(单位:万元):'))
p=[1000000,600000,400000,200000,100000,0]
t=[0.01,0.015,0.03,0.05,0.075,0.1]
r=0
for j in range(len(p)):
    if w>p[j]:
        r+=(w-p[j])*t[j]
        w=p[j]
print('奖金:',r)

 

posted @ 2019-10-16 14:54  飞奔的小猪猪  阅读(1297)  评论(0编辑  收藏  举报