竞争无处不在,青春永不言败!专业撸代码,副业修bug

Talk is cheap , show me the code!



python -- 算法

给定四个数字,找出不重复的排列组合可能


# 黑魔法方法,还纳闷 lambda 不能 yield 其实把 [] 改为小括号即是生成器啦

func = lambda num_tuple:((i,j,k,n) for n in num_tuple for k in num_tuple for j in num_tuple for i in num_tuple 
if i!=j and i!=k and i!=n and j!=k and j!=n and k!=n )
for n in func((1,2,3,4)):
print(n)

>>> num = (1,2,3,4)
>>> def func(num_tuple):
... for i in num_tuple:
... for j in num_tuple:
... for k in num_tuple:
... for n in num_tuple:
... if i is not j and i is not k and i is not n and j is not k and j is not n and k is not n:
... yield int(i)*1000 + int(j)*100 + int(k)*10 + int(n)
...
>>> for n in func(num):
... print(n)
...
1234
1243
1324
1342
1423
1432
2134
2143
2314

....省略....


# 要求:

# 企业实行阶梯制销售绩效方案。现规定:

# 销售额低于或等于10万时,提成10%;

# 销售额低于或等于20万时,超过10万的部分提成7.5%,其他从上;

# 销售额低于或等于40万时,超过20万的部分提成5%,其他从上;

# 销售额低于或等于60万时,超过40万的部分提成3%,其他从上;

# 销售额低于或等于100万时,超过60万的部分提成1.5%,其他从上;

# 销售额高于100万元时,超过100万的部分提成1%,其他从上。

# 要求输入某人的销售额,得出应发绩效。

# 分析:

# 1.利用数轴来分界,定位。

def switch(flag):
    return {'lt10':0.1,'10_20':0.075,'20_40':0.05,'40_60':0.03,'60_100':0.015,'gt100':0.01}.get(flag,0)

def kpi_func(amount):
    base_amt = (10**4)
    bonus_1 = 10*base_amt*switch('lt10')
    bonus_2 = bonus_1 + 10*base_amt*switch('10_20')
    bonus_3 = bonus_2 + 20*base_amt*switch('20_40')
    bonus_4 = bonus_3 + 20*base_amt*switch('40_60')
    bonus_5 = bonus_4 + 40*base_amt*switch('60_100')
    
    
    if amount<=10*base_amt:
        return amount*switch('lt10')
    elif amount<=20*base_amt:
        return bonus_1+(amount-10*base_amt)*switch('10_20')
    elif amount<=40*base_amt:
        return bonus_2 + (amount-20*base_amt)*switch('20_40')
    elif amount<=60*base_amt:
        return bonus_3 + (amount-40*base_amt)*switch('40_60')
    elif amount<=100*base_amt:
        return bonus_4 + (amount-60*base_amt)*switch('60_100')
    else:
        return bonus_5 + (amount-100*base_amt)*switch('gt100')
    

# 要求:

# 设有整数i,i+100是一个完全平方数,再加168又是一个完全平方数,求出该整数的值。

# 分析:

# 在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,如果开方后的结果满足如下条件,即是结果。
>>> def is_square_totally(x):
...     for i in range(1,x):
...         if i**2 == x:
...             return True
...     return False

>>> i=1
>>> while True:
...     if is_square_totally(i+100) and is_square_totally(i+168):
...         print(i)
...         break
...     i+=1
# 要求:

# 输入三个整数xyz,并将其按大小顺序输出。

# 分析:

# 慢一点的话,就是挨个比较大小,不过Python列表可以用sort函数,所以就方便多了。
i = input('请输入第一个数:')
j = input('请输入第一个数:')
k = input('请输入第一个数:')
l = []
l.append(int(i))
l.append(int(j))
l.append(int(k))
sorted(l,reverse=True)
# 一句话 python 打印 99 乘法表
print('\n'.join(['\t'.join(['{}*{}={}'.format(i,j,i*j) for j in range(1,i+1)]) for i in range(1,10,1)]))

print ('\n'.join([' '.join(['%s*%s=%-2s' % (y,x,x*y) for y in range(1,x+1)]) for x in range(1,10)]))

for i in range(1,10,1):
    for j in range(1,i+1,1):
        print('{}*{}={}\t'.format(i,j,i*j),end='')
    print()

# 输出国际象棋棋盘
import sys
for i in range(8):
    for j in range(8):
        if(i + j) % 2 == 0:
            sys.stdout.write(chr(219)+' ')
           # sys.stdout.write(chr(219))
        else:
            sys.stdout.write(chr(1)+' ')
    print('')
Û  Û  Û  Û  
 Û  Û  Û  Û 
Û  Û  Û  Û  
 Û  Û  Û  Û 
Û  Û  Û  Û  
 Û  Û  Û  Û 
Û  Û  Û  Û  
 Û  Û  Û  Û 
# 打印楼梯
for i in range(1,6,1):
    print(' '*(6-i),end='')
    print('#'*i)
    
print('\n'.join(['\n'.join([' '*(6-i)+'#'*i]) for i in range(1,6,1)]))
# 水仙花数 , 某个数 个十百 等 每个位置上的 数字 3次幂 等于该数本身
print([ i for i in range(100,1000) if sum([pow(int(str(i)[k]),3) for k in range(3)]) == i ])

def func():
    for n in range(100,1000):
        i = n//100
        j = n%100//10
        k = n%10
        if i**3+j**3+k**3 == n:
            yield n
for n in func():
    print(n)
# 1-100 质数
[n for n in range(1,100) if not [ m for m in range(2,n) if n%m == 0]]
posted @ 2018-07-05 10:44  云雾散人  阅读(241)  评论(0编辑  收藏  举报

Your attitude not your aptitude will determine your altitude!

如果有来生,一个人去远行,看不同的风景,感受生命的活力!