*题目1 四个数字取三位
有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?
列表解析
来自牛逼的山人,这段代码太简单,当然不可能体现他的牛逼。
a = [1,2,3,4]
b = [100*i+10*j+k for i in a for j in a for k in a if i!=j and j!=k and k!=i]
作者的三种解法:
普通列表切片拷贝、嵌套循环方法
i = [1,2,3,4]
for x in i:
j = i[:]
j.remove(x)
for y in j:
k = j[:]
k.remove(y)
for z in k:
print(x,y,z)
字符合并+列表推导式
用 int 函数将字符串转为整数
a = list('1234')
b = [int(i+j+k) for i in a for j in a for k in a if i!=j!=k!=i]
推导式+位运算判断
分析不重复三位数的二进制运算:1^2^3 = 000,1^2^4 = 111,1^3^4 = 110,2^3^4=101
说明1,2,3,4的任意三个互不重复的数逻辑与或的结果为 0,5,6,7,竟然刚好都不在原来的列表范围内,端地是神奇无比!于是 not in 派上用场。
a = [1,2,3,4]
b = [100*i+10*j+k for i in a for j in a for k in a if i^j^k not in a]
*题目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,求应发放奖金总数?
i = 1
#循环计算奖金总数,当输入值为0或小于0时,计算结束
while i > 0:
su = 0.0
i = float(input('输入当月利润(元):'))
if i > 1e6: su, i = (i - 1e6) * 0.01, 1e6
if i > 6e5: su, i = su + (i - 6e5) * 0.015, 6e5
if i > 4e5: su, i = su + (i - 4e5) * 0.03, 4e5
if i > 2e5: su, i = su + (i - 2e5) * 0.05, 2e5
if i > 1e5: su, i = su + (i - 1e5) * 0.075, 1e5
if 0 < i <= 1e5:
su += i * 0.10
print('奖金提成总数为: {0:.2f}元'.format(su))
else:
print('计算结束')
2018年8月3日 巴基斯坦