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)