=====================================================================================
遍历 D:/sylar文件夹, 打印出所有的文件和普通文件的文件名
import os
def func(filepath, n): # d:/sylar/
# 1,打开这个文件夹
files = os.listdir(filepath)
# 2. 拿到每一个文件名
for file in files: # 文件名
# 3. 获取到路径
f_d = os.path.join(filepath, file) # d:/sylar/文件名/
# 4. 判断是否是文件夹
if os.path.isdir(f_d):
# 5. 如果是文件夹. 继续再来一遍
print("\t"*n, file,":") # 打印文件名
func(f_d, n + 1)
else: # 不是文件夹. 普通文件
print("\t"*n, file)

func("d:/sylar",0)
==================================================================================
==================================================================================
二分查找:
掐头去尾取中间,一次砍一半
有序的才能用二分法
============================================================================================================
============================================================================================================
# 递归来完成二分法
lst = [22, 33, 44, 55, 66, 77, 88, 99, 101 , 238 , 345 , 456 , 567 , 678 , 789]
def func(n, left, right):
if left <= right: # 边界
mid = (left + right)//2
if n > lst[mid]:
left = mid + 1
return func(n, left, right) # 递归 递归的入口
elif n < lst[mid]:
right = mid - 1
# 深坑. 函数的返回值返回给调用者
return func(n, left, right) # 递归
elif n == lst[mid]:
print("找到了")
return mid
# return # 通过return返回. 终止递归
else:
print("没有这个数") # 递归的出口
return -1 # 1, 索引+ 2, 什么都不返回, None
# 找66, 左边界:0, 右边界是:len(lst) - 1
ret = func(70, 0, len(lst) - 1)
print(ret) # 不是None
==================================================================================================================
==============================================================================================================
# 2. 给出一个纯数字列表. 请对列表进行排序(升级题).
# 思路:
# 1. 完成a和b的数据交换. 例如, a = 10, b = 24 交换之后, a = 24, b = 10
# 2. 循环列表. 判断a[i]和a[i+1]之间的大小关系, 如果a[i]比a[i+1]大.
# 则进行互换. 循环结束的时候. 当前列表中最大的数据就会被移动到最右端.
# 3. 想一想, 如果再次执行一次上面的操作. 最终第二大的数据就移动到了右端.
# 以此类推. 如果反复的进行执行相应的操作. 那这个列表就变成了一个有序列表.

lst = [1,34,534,2,5,7,2]
count = 0
while count < len(lst):
i = 0
while i < len(lst) - 1:
if lst[i] > lst[i+1]:
lst[i],lst[i+1] = lst[i+1],lst[i]
i = i + 1
count = count + 1
print(lst)

======================================================================================
======================================================================================
lst = [22, 33, 77, 55, 66, 44, 88, 345, 99, 101, 238, 789, 456, 567, 678]
#用冒泡排序和二分查找,查询87是不是在里面,并返回索引
count = 0
while count < len(lst):
i = 0
while i < len(lst)-1:
if lst[i] > lst[i+1]:
lst[i],lst[i+1] = lst[i+1],lst[i]
i += 1
count += 1
print(lst)
def func(n,left,right):
if left <= right:
mid = (left+right)//2
if n > lst[mid]:
left = mid+1
return func(n,left,right)
elif n < lst[mid]:
right = mid-1
return func(n,left,right)
elif n == lst[mid]:
print('找到了')
return
else:
print('没找到')
return -1
func(78,0,len(lst)-1)