# 循环打印“抱着抱着抱着我的小鲤鱼的我的我的我”
def test(n):
if n == 0:
print("我的小鲤鱼", end='')
else:
print("抱着", end='')
test(n-1)
print("的我", end='')
test(5)
#汉诺塔问题
t = 0
def hanoi(n, A, B, C):
global t
if n > 0:
hanoi(n-1, A, C, B)
t += 1
print("%s -> %s" % (A, C))
hanoi(n-1, B, A, C)
# hanoi(8,'A','B','C')
# print(t)
#查找
from timewrap import * #导入的是一个计算时间的装饰器
@cal_time #计算时间的装饰器
def binary_search(li, val): #二分查找法
low = 0 #左边从0算起
high = len(li) - 1 #右边从列表长度-1算起
while low <= high: #说明至少两个元素
mid = (low + high) // 2 #找到中间的那个值
if li[mid] > val: #如果中间值比要查找的那个值还大,说明你要查找的值在左边
high = mid - 1
elif li[mid] < val: #如果中间值比要查找的那个纸还小,说明你要查找的值在右边
low = mid + 1
else: #第三种可能性就是直接找到了
return mid
else:
return -1 #如果穿进去的值是一个空的列表
def find_a(nums, target): #nums是一个列表,target是你要查找的对象,
low = 0 #左边从0开始算起
high = len(nums) - 1 #右边从最大长度-1开始算起
while low <= high: #至少有一个值
mid = (low + high) // 2 #中间值的索引
if target <= nums[mid]: #如果你要查找的值在中间值得左边
high = mid - 1 中间值为最大值
else:
low = mid + 1 #中间值为最小值
#[1, 2, 2, 2, 4, 8, 10]
if low < len(nums):
return low
else:
return -1
def find_b(nums, target):
low = 0
high = len(nums) - 1
while low <= high:
mid = (low + high) // 2
if target < nums[mid]:
high = mid - 1
else:
low = mid + 1
if low < len(nums):
return low
else:
return -1
@cal_time
def linear_search(li, val): #li是列表,val是你要查找的值,找得到返回索引,找不到返回-1
try:
return li.index(val) #返回索引
except ValueError:
return -1 #找不到
li = [1,2,2,2,4,8,10]
print(find_a(li, 10))
#利用二分查找法查找学生的详细信息并输出
l = [
{"id":1001, "name":"张三", "age":20},
{"id":1002, "name":"李四", "age":25},
{"id":1004, "name":"王五", "age":23},
{"id":1007, "name":"赵六", "age":33}
]
def bin_search(data_set,value):
low = 0 #最左边的
high = len(data_set) - 1 #最右边的
while low <= high:
mid = (low+high) // 2 #中间的
if data_set[mid]["id"] == value: #如果中间这个值得id == value,就返回详细信息
return (mid,data_set[mid])
elif data_set[mid]["id"] > value: 如果这个id大于value值,
high = mid -1
else:
low = mid + 1
else:
return (0,None)
print("退出q请按Q")
flag = True
while flag:
sid = input("请输入学生学号>>>:").strip()
if sid.isdigit():
if sid.upper() == "Q":
flag = False
else:
sid = int(sid)
mid,infos = bin_search(l,sid)
if not infos:
print("抱歉,没有这个人")
else:
s = "学生学号:{id},姓名:{name},年龄:{age}".format(**infos)
print("该学生的信息索引坐标是:%s"%mid)
print("该学生的所有详细信息为:%s"%s)