Python4

冒泡排序

  • 两两比较,最大的放尾部
a=20
b=10
#临时变量
c=a
a=b
b=c
print(a)
print(b)
nums = [30,20,1,3,21,11]
for j in range(0,len(nums)-1):#0 1 2 3 4
    if nums[j] > nums[j+1]:
        nums[j],nums[j+1] = nums[j+1],nums[j]
print(nums)


for i in range (0,len(nums)-1):
	for j in range(0,len(nums)-1-i): #0 1 2 3 4
        if nums[j]>nums[j+1]:
            nums[j],nums[j+1] = nums[j+1],nums[j]
print(nums)

选择排序

  • 类似于冒泡排序,每一次都找到最小值
nums = [11,22,2,1,43,234,21]
for i in range (0,len(nums)-1):
    min = i
    for j in range(i+1,len(nums)):
       if nums[j] < nums[min]:
        min = j
    if i != min:
        nums[i],nums[min] = nums[min],nums[i]
print(nums)

插入排序

  • 默认第一个元素是有序的,之后依次插入后面的每一个值(多次比较),最终得到排序结果
nums = [11,2,12,13,1,4]
#[2,11,12,13,1,4]
#[1,2,11,12,13,4]
#[1,2,4,11,12,13]

for i in range(0,len(nums)-1):
    for j in range(i+1,0,-1):
        if nums[j] < nums[j-1]:
            nums[j],nums[j-1] = nums[j-1],nums[j]
print(nums)

计数

  • 创建容器最大值与最小值的偏值的数组并清空为0
arr = [2,3,1,6,5,7]
arr0 = [0,0,0,0,0,0]===[1,2,3,5,6,7]
		0 1 2 3 4 5 6 7

二分查找(折半查找)

  • 在有序序列中高效的查找指定的元素
nums = [1,33,44,66,77,567,5677]
a = 567

left = 0
right = len(nums)-1
while left <= right:
    mid = int((left+right)/2)
    guess = nums[mid]
    if guess == a:
        print(mid)
        break
    elif guess > a:
        right = mid - 1
    else:
        left = mid + 1

函数

  • 组织好的,可以重复使用的,用于实现特定功能的代码块
'''
def 函数名(参数1,参数2...):
	函数体
	return  语句
'''
def my_abs(x):
	if x < 0:
		return -x
	else:
		return x

# my_abs(1,2)
# my_abs('A')

#传入参数的类型检查
def my_abs(x):
	if not isinstance(x,int,float)):
		raise TypeError
a = my_abs(2)
print(a)
def sum_01():
	a = 1
	b = 2
	return a,b

a,b= sum_01()
print(a)
print(b)

v,b,n = (1,2,3)
print(v)
print(b)
print(n)

#事实上,函数返回的是一个元组,多个变量可以同时接收一个元组

sum_01()

参数

#定义函数的时候,确定参数名和参数位置

#位置参数

def sum_01(x,y):
	print(x+y)
	
sum_01(1,2)

#1.数量必须与定义时一致
#2.位置必须与定义时一致

#默认参数

def abc(a,b):
    print(a)
    print(b)
    
abc(1,2)
abc(1)

'''
默认值只会执行一次
官方推荐,默认参数尽量使用不可变类型,原因在于可变对象会存储在后期调用过程中传递给它的参数

默认参数之后必须也是默认参数

函数在被定义的时候,默认参数b的值会被计算出来,即为一个空的列表[],因为默认参数b也是变量,指向对象列表[],每次调用函数,如果改变了参数b中的内容,则在下一次调用时,默认参数的内容也改变了。

'''

def abc(a,b=[])
	b.append(a)
    print(b)
    
    
abc(100)
abc(200)   #[100,200]

def abc(a,b=None):
	if b == None:
		b = []
		b.append(a)
		print(b)

关键字参数

  • 函数调用时,指定参数的名称,即为关键字参数
def abc(a,b):
	print(a)
	print(b)

abc(a=2,b=4)
  • 关键字参数必须放在普通参数的后面

命名关键字参数

  • 限定后面的参数必须是以关键字形式传参
def abc(a,b,*,c,d):   #*后面的参数必须为关键字形参
	print(a)
	print(b)
	print(c)
	print(d)

abc(1,2,c = 1,d = 2)

可变参数

def abc(a,*b):   #可变参数*
	print(a)     #可变参数自动接收所有未匹配的位置参数储存到一个元组对象中
	print(b)

abc(11,12,13,14,344)      #=>  11
                               (12,13,14,344)
def abc(a,**b): #可变参数**
	print(a)    #所有未匹配的位置参数存储到一个字典中 
	print(b)

abc(10)
def sum_01(*args):
	sum1 = 0
	for i in args:
		sum1 += i
	return sum1

a = sum_01(1,22,34,6,7)
print(a)

参数的解包

  • 参数类型是字符串、列表、元组、集合、字典的时候,可以解包

  • 传递实参时,

    def abc(a,b,c):
    	print(a)
    	print(b)
    	print(c)
    	
    abc(*"123")
    abc(*[4,5,6])
    
    d = {
        "uname" : "zs",
        "age" : 18,
        "技能" :"python"
    }
    
    abc(*d)
    

    函数递归

  • 如果一个函数内部调用了自己本身,那么这个函数就是递归函数

def fn()
	print("我是递归函数")
	fn()

fn()

#阶乘
'''
9!=8!*9
9!=7!*8*9




9!=1*2*3*4*5*6*7*8*9


n!=(n-1)!*n
递归出口:1
'''

def fact(n):
    if n==1:
        return 1
    else:
        return fact(n-1)*n
    
    
a = fact(3)
print(a)
  • 递归函数在使用的时候,注意防止栈溢出

汉诺塔

def hanno(n,A,B,C):
	if n > 0:
		hanno(n-1,A,C,B)
		print(f"盘子{n}{A}=》{C}")
		hanno(n-1,B,A,C)
		
hanno(3,'A','B','C')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值