1. 程式人生 > >python中的內建函式(二)

python中的內建函式(二)

1.部分內建函式

 repr()顯示出字串的官方表示形式,返回一個物件的string形式

# repr 就是原封不動的輸出, 引號和轉義字元都不起作用
print(repr('大家好,\n \t我叫周杰倫'))
print('大家好我叫周杰倫')
# %r 原封不動的寫出來 name = 'taibai' print('我叫%r' % name)

前面用r來原封不動的寫出來
print(r'我叫\n\t,,,') # 我叫\n\t,,,

 

chr() 輸入位置數字找出對應的字元

# 找到對應編碼位置的字元
print(chr(97))  # a
print(chr(20013))  #

 

ascii() 是ascii碼就返回該值,不是就返回/u

# 在ascii中就返回這個值. 如果不不在就返回\u...
print(ascii('a'))  # 'a'
print(ascii('好'))  # '\u597d' 

 

ord() 輸入字元找帶字元編碼的位置

# 找到對應字元的編碼位置
print(ord('a'))  # 97
print(ord('中'))  # 20013

 

2.遞迴

  在函式中呼叫函式本身.就是遞迴

def func():
    print("我是誰")
    func()
func()

 

  在python中遞迴的深度最大到998,

官方給的深度是1000,我在pycharm中測試是998

在python中遞迴的深度最大到998
def foo(n):
    print(n)
    n += 1
    foo(n)
foo(1)   # 998結束

 

使用遞迴來遍歷資料夾中所有檔案

import os

def func(lujing,n):  # "d:\a\"  定義這個函式 引數為路徑,n用來顯示子資料夾更清晰
    lst = os.listdir(lujing)  # 獲取路徑下的資料夾列表
    for el in lst:  # 遍歷這個列表,這裡獲取的只是本層檔名  b, c
        path = os.path.join(lujing,el)  # 加入資料夾 獲取到資料夾 +檔案
        if os.path.isdir(path):  #  "d:/a/b" 如果該路徑下的檔案是資料夾型別
            print('\t'*n,el)
            func(path,n+1)  # 繼續相同的操作,這裡使用遞迴
        else:
            print('\t'*n,el)
func('D:\a',0)

  

3.二分查詢

  二分查詢,每次能夠排除掉一半的資料,查詢的效率非常高,但是侷限性比較大,必須是有序序列才可以使用二分查詢

要求:查詢的序列必須是有序序列

 

使用while迴圈的二分法

lst = [1,3,5,7,12,36,68,79] # 資料集 百萬級資料
num = int(input("請輸入你要查詢的元素資訊:"))

left = 0
right = len(lst)-1

while left<=right:
    mid = (left + right) // 2
    if num>lst[mid]:
        left = mid +1
    elif num<lst[mid]:
        right = mid - 1
    else:
        print('存在')
        print(mid)
        break
else:
    print('不存在')

 

使用遞迴的二分法

lst = [1,3,5,7,12,36,68,79] # 資料集 百萬級資料
num = int(input("請輸入你要查詢的元素資訊:"))

def func(num,left,right):
    if left < right:
        mid = (left+right)//2
        if num >lst[mid]:
            left = mid+1
        elif num < lst[mid]:
            right=mid-1
        else:
            print('存在')
            return mid
        return func(num,left,right)  # 這個return必須要加否則永遠返回none
    else:
        print('找不到')
        return -1  # 這裡用返回-1
a = func(num,0,len(lst)-1)
print(a)

  

用遞迴和列表切片的二分法

lst = [1,3,5,7,12,36,68,79] # 資料集 百萬級資料
num = int(input("請輸入你要查詢的元素資訊:"))

def func(num,lst):
    left = 0
    right = len(lst)-1
    if lst != []:
        mid = (left+right)//2
        if num > lst[mid]:
            func(num,lst[mid+1:])
        elif num < lst[mid]:
            func(num,lst[:mid])
        else:
            print('找到了')
            return
    else:
        print('沒找到')
        return
func(num,lst)

  

 

一種極為快速的查詢方式,我在小學生程式設計書上看到過的

lst = [1,3,55,98,37,41,2,5,1,4]
new_lst = []
for i in range(99):
    new_lst.append(0)

for i in lst:
    new_lst[i] = 1

i = int(input('請輸入你要找的資料'))
if new_lst[i] == 0:
    print('不存在')
else:
    print('存在')