python100练习题心得

程序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,求应发放奖金总数?
提问:从键盘上输入当月利润,求应发放奖金总数?

解题思路:

#coding:utf-8
bonus1=100000*0.1
bonus2=bonus1+100000*0.75
bonus4=bonus2+200000*0.5
bonus6=bonus4+200000*0.3
bonus10=bonus6+400000*0.15
mon = input("请输入月利润:\n")
if mon<=100000:
    bonus=mon*0.1
else:
    if mon<=200000:
        bonus=bonus1+(mon-100000)*0.075
    else:
        if mon <= 400000:
            bonus = bonus2 + (mon - 200000) * 0.05
        else:
            if mon <= 600000:
                bonus = bonus4 + (mon - 400000) * 0.03
            else:
                if mon <= 1000000:
                    bonus = bonus6 + (mon - 600000) * 0.015
                else:
                    if mon > 1000000:
                        bonus = bonus10 + (mon - 1000000) * 0.01
print bonus

可以看到此代码使用if进行嵌套进行的,用到的方法比较简单,思路比较清晰,但是可以看到代码量也比较大。

方法2 :此题是分段计算题,涉及到判断,循环等问题
可以利用数轴来分界及定位。并注意定义时需要把奖金定义成长整形的数据类型

#coding:utf-8
i=int(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)

这个代码利用了数轴的进行定位,代码简单,方法比较巧妙

程序3

题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
程序分析:循环计算即可,判断成立即可输出。首先要判断是否为正整数。引入math模块算平方根。

#coding:utf-8
import math
#题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
 
#第一种解法 判断x,y开方同时为整数即可
print '解法一'
for i in range(100000):
    if(math.sqrt(i+100)-int(math.sqrt(i+100))==0):
        x = int(math.sqrt(i + 100)) # 开方求x x为浮点数
        if (math.sqrt(i + 268) - int(math.sqrt(i + 268)) == 0):
            y = int(math.sqrt(i + 268))  # 开方求x x为浮点数
            print x,y
            print '该数为%d' %i
 
#第二种 直接求x*x-y*y=168
print '解法二'
for i in range(10000):
    for j in range(1000):
        if(i*i-j*j==168):
            print i,j
            print '该数为%d' %(i*i-268)
 
#第三种 标准解法
print '解法三'
for i in range(100000):
    if(math.sqrt(i+100)-int(math.sqrt(i+100))==0):
        x = int(math.sqrt(i + 100)) # 开方求x x为浮点数
        if (math.sqrt(i + 268) - int(math.sqrt(i + 268)) == 0):
            y = int(math.sqrt(i + 268))  # 开方求x x为浮点数
            if(x*x==i+100 and y*y==i+268):
                print x, y
                print '该数为%d' % i
import math
for i in range(10000):
	x=int(math.sqrt(i+100))
	y=int(math.sqrt(i+268))
	if (x*x==i+100) and (y*y==i+268):
		print(i)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值