递归函数
# 直接或者间接的调用自己
# 直接或者简介调用自己
import sys
# print(sys.getrecursionlimit())
# sys.setrecursionlimit(2000)
# print(sys.getrecursionlimit())
# count = 1
# def index():
# print('from index')
# global count
# count += 1
# print(count)
# index()
#
#
# index()
'''
递归深度默认是1000次,递归深度是可以查看和更改的
'''
#
# def index():
# print('from index')
# func()
# def func():
# print('from func')
# index()
# func()
# age(5) = age(4) + 2 # 26
# age(4) = age(3) + 2 # 24
# age(3) = age(2) + 2 # 22
# age(2) = age(1) + 2 # 20
# age(1) = 18
'''
递归一定一定要有结束条件!!!
'''
# def age(n):
# # return age(n - 1) + 2 # age(4)+2
# # return age(n - 1) + 2 # age(3)+2
# # return age(n - 1) + 2 # age(2)+2
# if n==1:
# return 18
# return age(n - 1) + 2 # age(1)+2
#
# print(age(5))
l = [1, [2, [3, [4, [5, [6, [7, [8, [9, [10, ]]]]]]]]]]
# 第一种方式:
# for i in l:
# if type(i) is int:
# print(i)
# else:
# # 说明当前循环的数据类型是列表
# for j in i:
# # 判断j是什么类型
# if type(j) is int:
# print(j)
# else:
# # 说明当前循环的数据类型是列表
# for k in j:
# if type(k) is int:
# print(k)
# else:
# # 说明当前循环的数据类型是列表
# for x in k:
# if type(x) is int:
# print(x)
#
#
# 第二种方式:
def get_num(l):
for i in l:
if type(i) is int:
print(i)
else:
get_num(i)
get_num(l)
三元表达式
# def my_max(a, b):
# if a > b:
# return a
# else:
# return b
#
#
# print(my_max(1, 2))
# 针对上述只有两种情况的判断,我们可以使用三元表达式
# a = 1111
# b = 211
# res = a if a > b else b
# print(res)
#### 不推荐使用,但是,面试的时候使用
# a = 1111
# b = 2111
# username = 'ly'
# res = a if a > b else ('world' if False else ('帅哥' if username == 'ly' else 'dsb'))
# print(res)
##### 让用户输入判断
cmd = input('username:').strip()
# if cmd == 'ly':
# print('帅哥')
# else:
# print('dsb')
res = '帅哥' if cmd == 'ly' else 'dsb'
print(res)
算法之二分法
# 什么是算法
就是解决问题的高效方法
# 二分法
# 常见的算法:冒泡算法, 二分法,选择排序
l = [1, 2, 3, 4, 5, 6, 11, 22, 34, 44, 55, 66, 67, 333, 444]
# 第一种方式
# for i in l:
# if i == 66:
# print('找到了')
# 1. 排序
# l.sort()
def my_half(target_num, l):
# target_num = 34
# l
# 1. 从列表中去一个中间值
middle_index = len(l) // 2 # 7
# 2. 比较
if target_num > l[middle_index]:
# 要找的元素在右边
l_right = l[middle_index + 1:]
my_half(target_num, l_right)
print(l_right)
elif target_num < l[middle_index]:
# 要找的元素一定在左边
l_left = l[:middle_index]
my_half(target_num, l_left)
print(l_left)
else:
print('找到了,哈哈哈哈')
列表生成式(掌握)
l = ['ly', 'jason', 'tom']
new_list = []
# 第一种方式:
# for i in l:
# new_list.append(i +'_dsb')
#
# print(new_list)
# 第二种方式:
# res = [i + '_dsb' for i in l]
# print(res)
# 传统写法:
# for i in l:
# if i != 'jason':
# new_list.append(i+'_dsb')
# else:
# new_list.append(i)
# 列表生成式:
# res = [i + '_dsb' for i in l if i != 'jason' ]
res = [i + '_dsb' if i != 'jason' else i for i in l]
print(res)
字典生成式(了解)
l = ['ly', 'jason', 'tom']
new_list = []
# 第一种方式:
# for i in l:
# new_list.append(i +'_dsb')
#
# print(new_list)
# 第二种方式:
# res = [i + '_dsb' for i in l]
# print(res)
# 传统写法:
# for i in l:
# if i != 'jason':
# new_list.append(i+'_dsb')
# else:
# new_list.append(i)
# 列表生成式:
# res = [i + '_dsb' for i in l if i != 'jason' ]
# res = [i + '_dsb' if i != 'jason' else i for i in l]
# print(res)
# 字典生成式
l1 = ['name', 'age', 'hobby']
l2 = ['ly', 18, 'music']
# 补充:
# for i,j in enumerate(l1, start=2):
# print(i,j)
# 定义一个空字典
# new_dict = {}
# for i in range(len(l1)):
# new_dict[l1[i]] = l2[i]
#
# print(new_dict)
# 字典生成式
# res = {l1[i]: l2[i] for i, j in enumerate(l1)}
# print(res)
# 集合生成式
# res = {l1[i] for i, j in enumerate(l1)}
# # print(res)
# 生成器
# res = (l1[i] for i, j in enumerate(l1))
# print(res)
匿名函数
# 没有名字的函数
'''
语法格式:
lambda 参数:返回值
'''
def index(x):
return x ** 2
# print(index)
# print((lambda x:x**2)(2)) # 目的:不是这样用的,不会单独使用匿名函数
# res = lambda x:x**2
# print(res(2))
# 结合一些内置函数使用
l = [1, 2, 3, 4, 5, 6]
# map函数
# def add(i):
# return i + 1
# zip...
res=list(map(lambda x:x**3, l))
print(res)