1. 程式人生 > 其它 >【Python 遞迴哈數&內建函式&random&re 07】

【Python 遞迴哈數&內建函式&random&re 07】

一、 遞迴函式 -->自己呼叫自己

def wahaha():
    print('wahaha')
    wahaha()
wahaha()
# 官網規定的遞迴的最大次數是1000次

#案例

# l=[1,2,3,4,[5,6,7,8[9,10,11,12]]]  求這個列表中所有元素的和
l=[1,2,3,4,[5,6,7,8,[9,10,11,12]]]
sum_n=0
def sum_clac(lst):
    global sum_n
    for i in lst:
        if type(i) is list:
            sum_clac(i)
        
elif type(i) is int or type(i) is float: sum_n += i return sum_n ret=sum_clac(l) print(ret) #78

二、內建函式

1、eval函式 -->把字串的組成的內容當做Python的程式碼來執行,並返回值

2、exec函式 -->把字串的組成的內容當做Python的程式碼來執行,沒有返回值

a = input('>>>>') #輸入:1+2
print(a) #1+2
print(eval(a)) #3
print(exec(a)) #None

3、callable 名字後面可以加()才可以被呼叫

   --->dir檢視一個函式可以呼叫那些方法

a =1
print(callable(a)) #False

b = lambda :1
print(callable(b)) #True

4、print

print(1,2) #1 2 #預設已空格進行的分隔
print(1,2,end='*') #1 2*  -->end是已什麼結尾的,預設已換行符(\n)進行的換行,可以用end自定義自己所需要的結尾方式
print(1,2,sep=',') #1,2 -->sep已什麼分隔的

5、99乘法表

#99乘法表
for i in range(1,10): for j in range(1,i+1): print('%d*%d=%d'%(i,j,i*j),end=' ') print('')

6、和數字相關的函式

ret = divmod(10,3) #divmod返回(除,餘)
print(ret) #(3, 1)

ret1 = round(1.2345,2) #round小數取幾位
print(ret1) #1.23

ret2 = pow(2,3) #2的3次方,叫冪
print(ret2) #8
#2的3次方還可以這麼寫
print(2**3)
# 字典裡面的數求和
dic = {'a':50,'b':100}
ret3=sum(dic[k] for k in dic) #這裡面用到了生成器函式
print(ret3) #150

7、字元相關的內建函式

 

 常用ord,chr,repr

1)ord把十進位制的轉換成16進位制,chr剛好相反把16進位制轉換成10進位制

print(ord('a')) #97
print(chr(97)) #a

有什麼用 --驗證碼收到的隨機數(數字能隨機,但是字元是不能隨機的,想要字元隨機怎麼辦?把數字組合後然後用chr轉換)

2)repr 列印某個變數值的時候更便於區分型別

print(repr('123'))
print(repr(123))
print(123)
print('123')

執行結果:
'123'
123
123
123
常規列印的時候是區分不出來字串還是int型別的數字,為了區分可以用repr修飾

3)reverse()  反轉,類似於[::-1] 專門給list用的

  reversed() 是一個內建函式,也是反轉,但是不會改變list,返回的是一個迭代器

l = [1,3,6,2]
l.reverse()
print(l) #[2, 6, 3, 1]

ret = reversed(l)
print(ret) #<list_reverseiterator object at 0x103ce8f70>
print(l) #[1, 3, 6, 2] 不會改變list
for i in ret:
    print(i,end=' ') #2 6 3 1

從上面兩個執行的結果可以看出來,reversed()確實不會改變list本身,他的返回結果是一個迭代器,而reverse()的確是會改變list列表本身的

8、filter、map都是一個返回值為迭代器的函式

lst = [1,2,3,4,5,6,7,8,9,10]
ret1 = filter(lambda n:n%3==0,lst)
print(ret1) #<filter object at 0x100adefa0>
print(ret1.__next__()) #3

ret2 = map(lambda n:n*2,lst)
print(ret2) #<map object at 0x100adee80>
print(ret2.__next__()) #2

9、zip拉鍊