python3---函数的理解和使用

<1>python内置数据结构

数值;bool;str;list; tuple; set; dict

可变数据类型和不可变数据类型
    可变数据类型:list set dict(是否可以增删改查)

有序数据类型和无序数据类型
    有序:str list tuple
    无序:数值 bool set
python2:dict无序 python3中:dict有序

一般情况下:有序数据类型可以索引,切片,连接,重复 但是字典除外

<2>函数的理解和定义

1>函数的定义
def 函数名():
    函数体
1>函数的理解
定义一个函数
在没有调用函数的情况下,函数是不会被执行的
函数里面嵌套函数
def func1(a):
    # 定义函数时的变量称为形式参数,变量名可以任意起
    print('hello %s' %(a))
    # 调用函数时的参数称为实参,该参数必须是实际存在的
func1(12)
函数里面嵌套函数
def fentiao():
    print('is fentiao....')
    def westos():
        print('westos')
    westos()
fentiao()
形参和实参
def func1(a):
    # 定义函数时的变量称为形式参数,变量名可以任意起
    print('hello %s' %(a))
# 调用函数时的参数称为实参,该参数必须是实际存在的
func1(12)
func1('linux')
func1('python')
1>函数的应用
 编写一个名为collatz()的函数,它有一个名为number的参数。
 	如果参数是偶数,那么collatz()就打印出number//2
 	如果number是奇数,collatz()就打印3*number+1

在这里插入图片描述

<3>函数成员动态添加删除和返回值

1>函数成员动态添加删除
def fun():
    print(fun.x)
    fun()

# 动态添加
fun.x = 3
fun()

# 动态删除
del fun.x
fun()
2>函数的返回值
[1]函数调用时一般有返回值,没有定义返回值的时候,python中默认返回None
def hello():
    print('hello')

res = hello()
print(res)
[2]python函数中,只能返回一个值
def hello():
    # return 返回的表达式或者变量
    return 'hello'

res = hello()
print(res)
[3]如果非要返回多个值,会把返回的值封装为一个元组数据类型
def fun(a):
    # 接收一个列表,求这个列表的最大值,平均值,最小值
    max_num = max(a)
    min_num = min(a)
    avg_num = sum(a) / len(a)
    # python函数中,只能返回一个值
    # 如果非要返回多个值,会把返回的值封装为一个元组数据类型
    return max_num,min_num,avg_num
    
variables = fun([1,2,34,5,67,89,120])
print(variables,type(variables))
def hello():
    # return 返回的表达式或者变量
    return 'hello'
3>函数的应用1
 随机生成20个学生的成绩
 判断这个20个学生的等级

在这里插入图片描述
在这里插入图片描述

3>函数的应用2

在这里插入图片描述

<4>函数形参之四大参数类型

参数:形参;实参
形参的分类:位置参数;默认参数;可变参数;关键字参数

位置参数:形参和实参必须保持一致
	def getInfo(a, b):
	    pass
默认参数:形参和实参可以不一致
	def getIn(a=4, b=3):
	    pass
可变参数:用户可以传多个元素
	def get_Info(*args):  # *args是一个可变参数
	    return args  # args是元组数据
1.编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.
元组的第一个值为所有参数的平均值, 第二个值是大于平均值的所有数.
def cacluate(*args):
    li = []
    sum = 0
    for i in args:
        sum += i
    avg = sum / len(args)
    for i in args:
        if i > avg:
            li.append(i)
    return avg,li
print(cacluate(1,3,5,4,67,43))
2.编写一个函数, 接收字符串参数, 返回一个元组,‘hello WROLD’
元组的第一个值为大写字母的个数, 第二个值为小写字母个数
def str(args):    
    lower = 0
    upper = 0
    for i in args:
        if i.islower():
            lower += 1
        elif i.isupper():
            upper += 1
    return upper,lower

print(str('hello WORLD'))
3.编写函数, 接收一个列表(包含30个整型数)和一个整型数k, 返回一个新列表.
函数需求:
----将列对应(不包含k)下标k之前的元素逆序;
----将下标k之后的元素逆序;
def sort(li,k):
    # 将下标k之前的元素放入li1 
    li1 = li[:k]
    # 将下标k之后的元素放入li2
    li2 = li[k+1:]
    # 将下标k之前元素逆序
    li1.sort(reverse=True)
    #在下标k的位置添加下标k对应的元素
    li1.insert(k,li[k])
    # 将下标k之前元素逆序
    li2.sort(reverse=True)
    li3 = li1 + li2
    return li3
li = list(range(30))
print(sort(li,5))
关键字参数:
	def get_In(**kwargs):  # **kwargs是一个字典
	    return kwargs     #kwargs是字典类型
参数解包:*变量名, **变量名
对list tuple, set解包时, 只需要在变量前加*
如果要对字典解包, 一个星号,获取所有的key值
def getStuInfo(name,age,**kwargs):
    print(name,age,kwargs)
    
d = dict(a=1,b=2)
# *:获取key值
print(*d)
# **:获取字典
getStuInfo('westos',11,**d)
3>函数应用1
题目需求:
    对于一个十进制的正整数, 定义f(n)为其各位数字的平方和,如:
    f(13) = 1**2 + 3**2 = 10
    f(207) = 2**2 + 0**2 + 7**2 = 53
    下面给出三个正整数k,a, b,你需要计算有多少个正整数n满足a<=n<=b,
    且k*f(n)=n
输入:
    第一行包含3个正整数k,a, b, k>=1,  a,b<=10**18, a<=b;
输出:
    输出对应的答案;
范例:
    输入: 51 5000 10000
    输出: 3

在这里插入图片描述
在这里插入图片描述

<5>函数的作用域和函数类型检测

1>函数的作用域
 作用域:
	全局作用域:作用于整个程序
	局部作用域:在函数运行时生效,函数运行结束则释放

global关键字声明局部变量为全局变量

def fun():
    # 通过global关键字声明局部变量为全局变量
    # 函数执行完毕,变量依然生效
    global num
    num = 2
fun()
print(num)
1>函数应用1
 1.Collatz序列
编写一个名为collatz()的函数,它有一个名为number的参数。
如果参数是偶数,那么collatz()就打印出number//2,并返回
该值。如果number是奇数,collatz()就打印并返回3*number+1。
然后编写一个程序,让用户输入一个整数,并不断对这个数
调用collatz(),直到函数返回值1(令人惊奇的是,这个序列
对于任何整数都有效,利用这个序列,你迟早会得到1!既使数学
家也不能确定为什么。你的程序在研究所谓的“Collatz序列”,
它有时候被称为“最简单的、不可能的数学问题”)。
- 输入:
    3
- 输出:
    10
    5
    16
    8
    4
    2
    1

在这里插入图片描述
在这里插入图片描述

2>函数类型检测

isinstance(x, (int, float)) 判断x是否是整形或者浮点型

def add(x, y):
    if isinstance(x, (int, float)) and isinstance(y, (int, float)):
        return x + y
    else:
        print('Error:')

res = add(2.5,2)
print(res)
1>函数应用2

编写函数,计算字符串匹配的准确率
在这里插入图片描述
在这里插入图片描述

<6>函数应用

1>求参数的平均值和大于平均值的所有数
    编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.
    元组的第一个值为所有参数的平均值, 第二个值是大于平均值的所有数.

在这里插入图片描述

2>字母数字统计
  编写一个函数, 接收字符串参数, 返回一个元组,'ehllo WROLD'
  元组的第一个值为大写字母的个数, 第二个值为小写字母个数.

在这里插入图片描述

3>更改列表顺序
    编写函数, 接收一个列表(包含30个整形数)和一个整形数k, 返回一个新列表.
    函数需求:
        - 将列对应(不包含k)表下标k之前的元素逆序;
        - 将下标k之后的元素逆序;

在这里插入图片描述

4>模拟轮盘抽奖游戏
# 轮盘分为三部分: 一等奖, 二等奖和三等奖;
# 轮盘转的时候是随机的,
#       如果范围在[0,0.08)之间,代表一等奖,
#       如果范围在[0.08,0.3)之间,代表2等奖,
#       如果范围在[0, 1.0)之间,代表3等奖,

# 模拟本次活动1000人参加, 模拟游戏时需要准备各等级奖品的个数.

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值