目录
本章导读
一,函数的优势
1,提高复用性
2.将大问题分解成一系列的小问题
3.利于维护
顺序式
提高效率,抽象成函数
二,函数的定义
三要素:参数,函数体,返回值
def 函数名(参数):
函数体
return 返回值
2.1 函数的参数
2.1.1位置参数
·一般用在参数较少的情况
第一个和第三个都会发生错误
2.1.2 关键字参数
function(1,y=2,z=1)
`不能为同一个形参重复传值;
系统会报错
2.1.3 默认参数
有默认参数的形参放在后面
默认参数应该设置成一个不可变类型(数字,字符串,元组)
造成这个看似有记忆功能的原因是,当使用可变参数时,默认参数的地址从来没有变过,在执行第一次函数的时候,默认参数发生改变,地址不会发生改变,每次操作都是在这个地址上的列表操作
使用不可变参数的时候,不会产生这样的“记忆功能”
实现可变参数
2.1.4 可变长参数 *args
·实参打散
用*号实现列表的,字符串等的打散
2.1.5 可变长参数 **kwargs
·可变长参数的组合使用
2.2 函数体
2.2.1 全局与局部变量
局部变量:仅在函数体内定义和发生作用;
全局变量:外部定义的都是全局变量:
·全局变量可以在函数体内直接使用
可以通过global 在函数体内定义全局变量
z的可以顺利输出
2.2.2 返回值
单个返回值
多个返回值——以元组形式
元组的解包赋值
可以有多个返回值(多个return语句),但只能执行一个
没有return语句,返回值是None
2.2.3几点建议
1、函数及其参数的命名参照变量的命名
·字母小写及下划线组合
·有实际意义
2、应包含简要阐述函数功能的注释,注释紧跟函数定义后面
3、函数定义前后各空两行
2.3 函数编程实例
2.4 匿名函数
2.4.1 基本形式
lambda 变量:函数体
2.4.2常用用法
在参数列表中最适合使用匿名函数,尤其是与key=搭配
·排序sort()sorted()
.sort()是永久性的排序,会改变原始数据,sorted()是暂时性的排序
第一个程序是目的是根据元组第0个元素升序排序
第二个程序是目的是根据元组第1个元素升序排序
第三个程序是目的是根据元组元素和升序排序
如果要降序排序的话,在后面加reverse=ture
·max() min()
三,面向对象和面对过程
面向过程——以过程为中心的编程思想,以"什么正在发生"为主要目标进行编程。冰冷的,程序化的
面向对象——将现实世界的事物抽象成对象,更关注"谁在受影响”,更加贴近现实。有血有肉,拟人(物)化的
答案在末尾
四,知识总结
答案
import random
def get_input():
#获取数据
pro_A = eval(input("输入球员A得分概率:"))
num_of_game = eval(input("比赛场次:"))
pro_B = round(1 - pro_A, 2)
print("比赛次数:",num_of_game)
print("A的概率为:",pro_A)
print("B的概率为:",pro_B)
return pro_A,pro_B,num_of_game
def sim_n_game(pro_A,pro_B,num_of_game): #比赛的A,B在n场中赢得的场数
win_A,win_B = 0,0
for i in range(num_of_game):
score_A,score_B = sim_one_game(pro_A,pro_B)
if score_A > score_B :
win_A += 1
else:
win_B += 1
return win_A,win_B
def sim_one_game(pro_A,pro_B): #比赛一场的分数返回
score_A,score_B = 0,0
while not gameover(score_A,score_B):
if random.random() < pro_A:
score_A +=1
else:
score_B +=1
return score_A, score_B
def gameover(score_A,score_B): #当A或B有一个达到21分,返回1;
return score_A == 21 or score_B == 21
def print_sum(win_A,win_B,num_of_game):
print("A赢得场次为{0},概率为{1:.1%}".format(win_A,win_A/num_of_game))
print("B赢得场次为{0},概率为{1:.1%}".format(win_B,win_B/num_of_game))
def main():
pro_A,pro_B,num_of_game = get_input() #获取数据
win_A,win_B = sim_n_game(pro_A,pro_B,num_of_game) #返回结果
print_sum(win_A,win_B,num_of_game) #结果输出
main()