002 exercises

  • 求列表全排列python

lst = [1,2,3]
l1 = [(x,y,z) for x in lst for y in lst for z in lst if x != y if y != z if x != z]
print(l1)
  • 給定一個非負整數num,重複的加每一位,直到最後只剩下一位app

例如: num = 38,計算過程以下:ide

3 + 8 =11函數

1 + 1 = 2優化

最後輸出結果爲2orm

#遞歸
def add(num):
    if len(str(num)) == 1:
        return num
    ret = 0
    for i in str(num):
        ret += int(i)
        return ret
    return(add(ret))
print(add(8))
#累加器
def add(num):
    ret = 0
    for i in str(num):
        ret += int(i)
    return ret

def cacl(num):
    ret = num
    while ret >= 10:
        ret = add(ret)
    return ret
print(cacl(38))


#使用列表解析優化版
def add(num):
    return sum([int(x) for x in str(num)])
def cacl(num):
    ret = num
    while ret >= 10:
        ret = add(ret)
    return ret
print(cacl(38))
  • 尋找happy number遞歸

happy number值,對一個數字的每一位取平方後相加,對獲得的結果反覆執行上一步,直到最後只有一位,若是最後結果爲1,這個數就爲happy number.it

例如 19 就是happy number.由於form

1^2 + 9^2 = 82class

8^2 + 2^2 = 68

6^2 + 8^2 = 100

1^2 + 0^2 + 0^2 = 1

def add(num):
    ret = 0
    for i in str(num):
        ret += (int(i) ** 2)
    return ret

def happy_number(num):
    results = {num}
    ret = num
    while ret >= 10:
        ret = add(ret)
        if ret in results:
            return False
        results.add(ret)
    return ret == 1

for i in range(1,10000):
    if happy_number(i):
        print('{0} is happy number'.format(i))
#使用列表解析優化上版
def add(num):
    return sum([int(x) ** 2 for i in str(num)])

def happy_number(num):
    results = {num}
    ret = num
    while ret >= 10:
        ret = add(ret)
        if ret in results:
            return False
        results.add(ret)
    return ret == 1

for i in range(1,10000):
    if happy_number(i):
        print('{0} is happy number'.format(i))
  • 裝飾器

寫一個帶一個default_user 參數的裝飾器,此裝飾器檢查傳入函數的關鍵字參數,若是沒有名爲user的參數,使用default_user 做爲user 參數傳遞給函數.

例如:

@inject_user(default_user=comyn)

def do_something(*args,**kwargs):

print(kwargs['user'])

調用do_something() 時能輸入comyn

from functools import wraps
def inject_user(default_user):
    def func(fn):
        @wraps(fn)
        def deco(*args, **kwargs):
            if 'user' not in kwargs.keys():
                kwargs['user'] = default_user
            return fn(*args, **kwargs)
        return deco
    return func
    
@inject_user(default_user='comyn')
def do_somethings(*args, **kwargs):
    print(kwargs['user'])

          
do_somethings()


  • 列表匹配

寫一個find函數,傳入兩個列表,其中origin和iterms, items具備默認值[3, 4].查找iterms中每一個元素在origin中的全部位置.返回值爲字典,key是iterms中的元素,value是位置的元組.

例如:

find([2, 3, 5, 3, 4, 2, 7, 4]) 返回{3:(1, 3), 4:(4, 7)}

def find(origin,items=[3, 4]):
    fin = dict()
    for x in iter(items):
            lst = list()
        for k, v in enumerate(origin):
            if x == v:
                lst.append(k)
        fin[x] = tuple(lst)
    return fin

find([2, 3, 5, 3, 4, 2, 7, 4])

#使用列表解析優化
def find(origin,items=[3, 4]):
    fin = dict()
    for x in items:
        lst = list()
        [lst.append(k) for k, v in enumerate(origin) if x == v]
        fin[x] = tuple(lst)
    return fin

find([2, 3, 5, 3, 4, 2, 7, 4])
相關文章
相關標籤/搜索