遞迴與二分法習題二分法就是在按照從大到小或者從小到大規律排布的列表中,
尋找的值通過與中間的值比較大小,從而對列表進行操作,然後再比較的迴圈過程。
用遞迴的方法找出列表中的值
num = [1,3,4,5,6,8,22,33,55,778,990]
def search(search_number,num):
if len(num) == 0:return
mid = len(num) // 2
mid_nums = num[len(num)//2]
if search_number > mid_nums:
num = num[mid + 1:]
search(search_number,num)
elif search_number < mid_nums:
num = num[:mid]
search(search_number, num)
else:
print("find it")
search(363,num)
2.根據最後乙個人的年齡,猜測第乙個人的年齡
# def age(n): # 猜第五個人的年齡,傳進引數5
# if n == 1: # 已知最後乙個人的年齡 為26 (條件成立,遞推結束後,開始回溯)
# return 26
# return age(n-1) + 2 # age(4) +2 ---》 age(3) + 2 ---> age(2) +2 --->age(1) +2
## print(age(5))
3.列表巢狀列表,用遞迴取得列表中的所有值。
l=[1,[2,[3,[4,[5,[6,[7,[8,[9,]]]]]]]]]def tell(l):
for item in l:
if type(item) is list:
#繼續進入下一層遞迴
tell(item)
else:
print(item)
tell(l)
# 使用遞迴列印斐波那契數列# 0、1、1、2、3、5、8、13、21 # 0,1 1,1 1,2 2,3 3,5 5,8
# def fib(max):
# n,a,b = 0,0,1
# while n < max:
# print(b) #直接輸出數列的值
# a,b = b,a+b #b賦值給a後,a = 1,a+b 賦值給b b還是一,因為賦值後的a並沒有立即參與運算。
# n += 1
# print(fib(15))
# 0、1、1、2、3、5、8、13、21
# def func(num1,num2):
## res = num1+num2 # res = 1
# print(res)
# num1=num2
# num2 = res
# if res < 10000:
# func(num1,num2)
# else:
# return
## func(0,1)
# 2.乙個巢狀很多層的列表,如l =[1, 2, [3, [4, 5, 6, [7, 8, [9, 10, [11, 12, 13, [14, 15]]]]]]],用遞迴取出所有的值
# l =[1,2,[3,[4,5,6,[7,8,[9,10,[11,12,13,[14,15]]]]]]]
# def tell(l):
# for item in l:
# if type(item) is list:
# tell(item)
# else:
# print(item)
# tell(l)
# 3. 編寫使用者登入裝飾器,在登入成功後無需重新登入,同一賬號重複輸錯三次密碼則鎖定5分鐘
# import time
# user_status = ##
# def logging(func):
# count = 0
# while true:
## if count == 3:
# print("使用者名稱或密碼錯誤,賬戶已被鎖定")
# time.sleep(100)
# if user_status["user"]: # 這兒注意點
# res = func(*args, **kwargs)
# return res
# name = input("使用者名稱》: ").strip()
# pwd = input("密碼》: ").strip()
## if name == "egon" and pwd == "123":
# print("logging success")
# user_status["user"] = name
# res = func(*args,**kwargs)
# return res
# else:
# print("使用者名稱或密碼錯誤")
# count += 1##
# @logging
# def index(name):
# print("welcome to my country".format(name = name))
# return 123##
# @logging
# def auth(name):
# print("welcome to my country".format(name = name))
# return 234##
# index("egon")
# auth("luffei")
# 4、求檔案a.txt中總共包含的字元個數?思考為何在第一次之後的n次sum求和得到的結果為0?(需要使用sum函式)
# with open("a.txt",encoding="utf-8") as f:
# res = [len(line) for line in f]
# print(sum(res))
# 5、檔案shopping.txt內容如下
## mac,20000,3
# lenovo,3000,10
# tesla,1000000,10
# chicken,200,1
# 求總共花了多少錢?
## 列印出所有商品的資訊,格式為[,...]
## 求單價大於10000的商品資訊,格式同上
db_file = "a.txt"
with open(db_file,encoding="utf-8") as f:
res = [ for line in f]
print(res)
res2 = [item for item in res if int(item["price"])>10000]
print(res2)
遞迴函式練習題
1 寫乙個函式,接收乙個引數,用來返回這個函式的階乘並輸出 12345 def func num if num 1 return 1 ret func num 1 return num ret print func 5 2 寫乙個函式實現斐波那契數列 1,2,3,5,8,13,21,34,55,89...
PTA 演算法練習題 回溯
1.最佳排程問題 假設有n n 20 個任務由k k 20 個可並行工作的機器完成。完成任務i需要的時間為ti。試設計乙個演算法,對任意給定的整數n和k,以及完成任務i 需要的時間為ti i 1 n。計算完成這n個任務的最佳排程,使得完成全部任務的時間最早。輸入格式 輸入資料的第一行有2 個正整數n...
函式練習題
1.打字軟體的正確率 編寫函式,計算字串匹配的準確率,類似於打字軟體 orginstr為原始內容,userstr為使用者輸入內容 2.模擬輪盤 遊戲 轉盤分為三部分 一等獎 二等獎和三等獎 輪盤轉的時候是隨機的,如果範圍在 0,0.08 之間,代表一等獎 如果範圍在 0.08,0.3 之間,代表二等...