Python练习题

*题目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日 巴基斯坦

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yxp_xa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值