栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【深度之眼三——(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()

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1013127.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号