Python 100例实战训练——day01
【摘要】 参考资料:Python 100例 Python 练习实例1 Python 100例题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。解法一:# 基础解法,循环嵌套l = []for i in range(1,5): for j in range(1,5...
参考资料:Python 100例
Python 练习实例1
Python 100例题目:有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。
解法一:
# 基础解法,循环嵌套
l = []
for i in range(1,5):
for j in range(1,5):
for k in range(1,5):
if( i != k ) and (i != j) and (j != k):
a = 100*i+10*j+k
l.append(a)
print(f"共有{len(l)}个",l)
解法二:
# 调用第三方库,排列组合
# # 组合
# from scipy.special import comb
# # 阶乘
# from scipy.special import factoral
# 排列
from scipy.special import perm
print( perm(4,3))
# 从序列中取2个元素进行组合、元素不允许重复
import itertools as it
for e in it.permutations('1234', 3):
print(''.join(e), end=', ')
itertools的使用可参考:Python的排列组合函数
Python 练习实例2
Python 100例题目:企业发放的奖金根据利润提成。
利润(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,求应发放奖金总数?
程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。
解法一:
# 基础版 if判断
i = int(input('净利润(万元):'))
if i <=10:
account = i*10/100
elif i <=20:
account = (i-10)*7.5/100+10*10/100
elif i <=40:
account = (i-20)*5/100+10*7.5/100+10*10/100
elif i<=60:
account = (i-40)*3/100+20*5/100+10*7.5/100+10*10/100
elif i <=100:
account = (i-60)*1.5/100+20*3/100+20*5/100+20*7.5/100+10*10/100
else:
account = (i-100)*1/100+40*1.5/100+20*3/100+20*5/100+10*7.5/100+10*10/100
print(f"利润提成{account}")
解法二:
# 数轴定位
i = int(input('净利润(万元):'))
arr = [100,60,40,20,10,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)
解法三:
# cut 区间切分===》逻辑有点儿复杂,主要是想给大家介绍下pandas的cut函数,数据切分,解决这个问题比较复杂,用在其他问题上还是比较方便的
import pandas as pd
# 数轴定位
I= int(input('净利润(万元):'))
bins = [0, 11, 21, 41, 61, 101,1000000000000] #1000000000000 bins要比labels多一个,选一个特别大的数
rats = [0.1, 0.075, 0.05, 0.03, 0.015, 0.01]
par = [10,10,20,20,40,"nan"]
df = pd.DataFrame(list(zip(bins,rats,par)),columns=["区间下限","点数","参数"])
labels = df.index.to_list()
idx = pd.cut([I],bins,labels=labels,right= True)[0]
account = 0
for i in range(idx):
rate0 = df.iloc[i,1]
parm0 = df.iloc[i,2]
account += rate0*parm0
# print(account)
account = account + (I-df.iloc[idx,0]+1)*df.iloc[idx,1]
print(account)
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)