2):题目:企业发放的奖金根据利润提成。利润(I)低于或等于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%提成,从键盘输入当月利润I,求应发放奖金总数?

    程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。

    程序源代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*- i = int(raw_input('净利润:'))
arr = [1000000,600000,400000,200000,100000,0]
rat = [0.01,0.015,0.03,0.05,0.075,0.1]
r = 0
for idx in range(0,6):
if i>arr[idx]:
r+=(i-arr[idx])*rat[idx]
print (i-arr[idx])*rat[idx]
i=arr[idx]
print r

    以上实例输出结果为:

净利润:120000
1500.0
10000.0
11500.0

    再来看其他例子:

    使用if...elif...else语句逐一判断:

#!/usr/bin/python
# -*- coding: UTF-8 -*- import sys reload(sys)
sys.setdefaultencoding('utf-8') x = int(raw_input("净利润:")) if x<=100000:
bonus=x*0.1
print u"奖金:",bonus,u"元"
elif 100001<x<=200000:
bonus=10000+(x-100000)*0.075
print u"奖金:",bonus,u"元"
elif 200001<x<=400000:
bonus=10000+7500+(x-200000)*0.05
print u"奖金:",bonus,u"元"
elif 400001<x<=600000:
bonus=10000+7500+10000+(x-400000)*0.03
print u"奖金:",bonus,u"元"
elif 600001<x<=1000000:
bonus=10000+7500+10000+6000+(x-600000)*0.015
print u"奖金:",bonus,u"元"
elif 600001<x<=1000000:
bonus=10000+7500+10000+6000+6000+(x-600000)*0.01
print u"奖金:",bonus,u"元"

    还有一种:

#!/usr/bin/python
# -*- coding: UTF-8 -*- i = int(raw_input('净利润:'))
I = [1000000,600000,400000,200000,100000,0]
r = [0.01,0.015,0.03,0.05,0.075,0.1]
for j in range(len(I)):
if i > I[j]:
b = [0,0,0,0,0,0]
b[j] = i -I[j]
for k in range(j+1,len(I)):
b[k] = I[k-1]
bonus = sum(map(lambda (i1,i2): i1 * i2,zip(b,r)))
break
print '奖金:',bonus

    使用切片:

#!/usr/bin/python
# -*- coding: UTF-8 -*- value=int(raw_input('please input profit: '))
list1=[1000000,600000,400000,200000,100000,0]
list2=[0.01,0.015,0.03,0.05,0.075,0.1]
list3=[400000,200000,200000,100000,100000]
for i in range(6):
if value >list1[i]:
v1=(value-list1[i])*list2[i]
print v1
list2_new=list2[i+1:6]
list3_new=list3[i:5]
v2=sum(map(lambda (x,y):x*y,zip(list2_new,list3_new)))
print v2
print v1+v2
break

    Python中的列表可以嵌套,这样外层列表就跟数组一样,内层的是对象。不过Python的列表数据类型不一定一样,更加灵活了:

#!/usr/bin/python3

Bonus = 0;
BonusRateList = [[100,0.010],[60,0.015],[40,0.030],[20,0.050],[10,0.075],[0,0.100]]; Profit = 120000;
Profit /= 10000; for i in range(0, len(BonusRateList)) :
if (Profit > BonusRateList[i][0]) :
Bonus += ((Profit - BonusRateList[i][0]) * BonusRateList[i][1]);
Profit = BonusRateList[i][0]; print (Bonus * 10000);

    使用字典控制利润与提成比例的匹配:

#!/user/bin/env python
# coding=utf-8 # 计算公司的年度奖金,单位:万元
num = int(raw_input("请输入今年的公司利润:"))
obj = {100: 0.01, 60: 0.015, 40: 0.03, 20: 0.05, 10: 0.075, 0: 0.1}
keys = obj.keys()
keys.sort()
keys.reverse()
r = 0
for key in keys:
if num > key:
r += (num - key) * obj.get(key)
num = key
print "今年的奖金为:", r, "万元。"

    Python3 测试方法:

def  get_reward(I):
    rewards = 0
    if I <= 10:
        rewards = I * 0.1     elif (I > 10) and (I <= 20):
        rewards = (I - 10) * 0.075 + get_reward(10)     elif (I > 20) and (I <= 40):
        rewards = (I - 20) * 0.05 + get_reward(20)     elif (I > 40) and (I <= 60):
        rewards = (I - 40) * 0.03 + get_reward(40)     elif (I > 60) and (I <= 100):
        rewards = (I - 60) * 0.015 + get_reward(60)     else:
        rewards = get_reward(100) + (I - 100) * 0.01     return rewards if __name__ == '__main__':
    i = 120000
    print("净利润:", i)
    print("发放的奖金为:", get_reward(i / 10000) * 10000)

    可以同时使用两种方式创建生成器: 生成器推导式使用yield关键字构造生成器函数, 如下所示:

#使用两种方式创建生成器
a=[100,60,40,20,10,0]
b=[0.01,0.015,0.03,0.05,0.075,0.1] #生成器函数
def f(x):
for i in range(len(a)):
if n>a[i]:
#生成器推导式
c=(a[j]-a[j+1] for j in range(i,len(a)-1))
break
r=sum(map(lambda x,y:x*y,b[i:],[(n-a[i])]+list(c)))
yield r*10000 k=int(input("是否继续计算奖金?是:1, 否:0\n"))
while k:
n=int(input('请输入利润,单位(万元):'))
print('应发奖金为:',next(f(n)),'(元)')
print()
k=int(input("是否继续计算奖金?是:1, 否:0\n"))
print('感谢使用,程序结束!')

最后一个我感觉比较有意思,其它的怎么说呢,万变不离其宗吧。大家可以看下,大神们的代码习惯。如果感觉不错的话,请多多点赞支持哦。。。

python2.7练习小例子(二)的更多相关文章

  1. python2.7练习小例子(二十九)

        29):1.题目:按相反的顺序输出列表的值. #!/usr/bin/python # -*- coding: UTF-8 -*- a = ['one', 'two', 'three'] for ...

  2. python2.7练习小例子(十二)

        12):题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身.例如:153是一个"水仙花数" ...

  3. python2.7练习小例子(二十七)

        27):题目:一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同.      #!/usr/bin/python # -*- coding: UTF-8 -* ...

  4. python2.7练习小例子(二十八)

    28):题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母.     程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况语句或if语句判断第二个字母. ...

  5. python2.7练习小例子(二十四)

        24):1.题目:利用递归方法求5!.     程序分析:递归公式:fn=fn_1*4! #!/usr/bin/python # -*- coding: UTF-8 -*- def fact( ...

  6. python2.7练习小例子(二十三)

        23):题目:求1+2!+3!+...+20!的和.     程序分析:此程序只是把累加变成了累乘. #!/usr/bin/python # -*- coding: UTF-8 -*- n = ...

  7. python2.7练习小例子(八)

        8):题目:输出 9*9 乘法口诀表.     程序分析:分行与列考虑,共9行9列,i控制行,j控制列.     程序源代码: #!/usr/bin/python # -*- coding: ...

  8. python2.7练习小例子(七)

        7):题目:将一个列表的数据复制到另一个列表中.     程序分析:使用列表[:].     程序源代码: #!/usr/bin/python # -*- coding: UTF-8 -*- ...

  9. python2.7练习小例子(十八)

    19):题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完数.      #!/usr/bin/python # -*- ...

  10. python2.7练习小例子(十七)

        17):题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字.例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制.     程序分析: ...

随机推荐

  1. C#中委托。

    委托(delegate):是一个类型.其实winform中控件的事件也是特殊的委托类型. 如: 自定义委托:自定义委托在winform中的用法. 当要在子线程中更新UI时,必须通过委托来实现. pri ...

  2. Excel+DDT数据驱动实例

    一.首先安装dtt模块 数据驱动原理 1.测试数据为多个字典的list类型 2.测试类前加修饰@ddt.ddt 3.case前加修饰@ddt.data() 4.运行后用例会自动加载成N个单独的用例 二 ...

  3. 关于win10系统1709版本安装JDK出现变量配置正确但仍有“java不是内部或外部命令”的解决办法

    背景:联想拯救者R720笔记本,系统一键还原了,需要重新安装一部分软件,最基本的就是JDK,但今天在安装时遇到了问题,之前安装的1.8版本,没有仔细配置环境变量,这一次安装的是1.7版本的,仔仔细细配 ...

  4. 深度学习之 mnist 手写数字识别

    深度学习之 mnist 手写数字识别 开始学习深度学习,先来一个手写数字的程序 import numpy as np import os import codecs import torch from ...

  5. 多台linux主机之间建立免密通信

    多台linux主机之间设置免密通信 例:A 向 B设置免密通信 第一步 A生成密钥对 ssh-keygen -t rsa -t 指定秘钥的类型 rsa 秘钥类型 密钥目录:/root/.ssh/(如果 ...

  6. C#日志文件

    写日志文件是一个很常用的功能,以前都是别人写好的,直接调用的,近期写了一个小工具,因为比较小,所以懒得引用dll文件了,直接上网找了一个,很方便,现在记录下 public class LogClass ...

  7. linux环境 安装chromedriver 和 phantomjs的方法

    1 首先要下载浏览器驱动: 常用的是chromedriver 和phantomjs chromedirver下载地址: https://npm.taobao.org/mirrors/chromedri ...

  8. MyBatis(一):配置并使用

    MyBatis具体是什么东东,这些在后边在研究吧,本文目的是为了记录如何使用MyBatis. 首先,需要下载MyBatis开发所需要文件. 通过github上可以找到MyBatis代码:https:/ ...

  9. POJ-3259 Wormholes---SPFA判断有无负环

    题目链接: https://vjudge.net/problem/POJ-3259 题目大意: 农夫约翰在探索他的许多农场,发现了一些惊人的虫洞.虫洞是很奇特的,因为它是一个单向通道,可让你进入虫洞的 ...

  10. 线程的同步控制(Synchronization)

    临界区(Critical Sections) 摘要 临界区(Critical Section) 用来实现"排他性占有".适合范围时单一进程的各线程之间. 特点 一个局部对象,不是一 ...