【深度之眼三——(2)】 Python:函数-面向过程的编程

目录

一,函数的优势

二,函数的定义

 2.1 函数的参数

 2.1.1位置参数

 2.1.2 关键字参数

 2.1.3 默认参数

2.1.4  可变长参数  *args

 2.1.5  可变长参数  **kwargs

2.2 函数体

2.2.1 全局与局部变量

 2.2.2 返回值

 2.2.3几点建议

 2.3 函数编程实例

2.4 匿名函数

 2.4.1 基本形式

 2.4.2常用用法 

 三,面向对象和面对过程

 四,知识总结


本章导读

一,函数的优势

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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值