Python--函数

一.函数的定义
1.定义一个函数
当函数不调用时,此函数不会执行

def hello():  ##无结果输出
    print('hello')
    print('python')

2.函数的调用-以函数名调用函数

def hello():
    print('hello')
    print('python')
hello()  ##函数名调用函数
hello
python

3.函数里面的嵌套函数

def westos():
    print('is westos')
    def python():
        print('is python')
    python()
westos()
is westos
is python

4.函数的形参与实参
定义函数时的变量叫形参,可以任意的起名
调用函数时,传递的参数叫实参为真实的数据信息

def welcome(a):  ##a为形参
    print('hello',a)
welcome('tom')  ##‘tom'为实参
welcome('luck')
hello tom
hello luck

二.函数的形参分类
形参包括位置参数、默认参数、可变参数、关键字参数
1.位置参数:形参与是参的位置必须保持一致

def getInfo(name,age):
    print(name,age)
getInfo('westos',18)
getInfo(11,'luck')  ##位置不一致
getInfo(age=11,name='luck')  ##给形参赋值,不须在意位置
westos 18
11 luck  ##输出错误
luck 11

2.默认参数 形参与实参可以不一致

def mypow(x,y=2):  ##默认函数中形参y的值为2
    print(x**y)
mypow(2,3)  ##当输出两个实参,按输出的两实参计算
mypow(4)  ##当仅输出一个实参,则另一个实参按默认的来计算
8
16

3.可变参数

def mysum(*a):
    print(*a)
    print(a)
    sum = 0
    for item in a:
        sum+=item
    print(sum)
nums=[1,2,4,5]
nums1=(1,2,3,4)
nums2={1,2,3,4}
mysum(*nums)
mysum(*nums1)
mysum(*nums2)
1 2 4 5
(1, 2, 4, 5)
12
1 2 3 4
(1, 2, 3, 4)
10
1 2 3 4
(1, 2, 3, 4)
10

4.关键字参数

def getStuInfo(name,age,**k):  ##*k是一个字典,可以任意传递多个key-value值
    print(name)
    print(age)
    print(k)
d = dict(a=1,b=2)
print(*d)  ##对字典进行解包,一个*可以获取所有的key值
getStuInfo('westos',11,a=1,b=2)
a b  ##key值
westos  ##name
11  ##age
{'a': 1, 'b': 2}  ##*k

三.函数的返回值及作用域
1.函数的返回值
函数运算的结果,还需要进一步操作,给函数一个返回值
return用来返回函数执行的结果,如果函数没有返回值,默认返回None
一旦遇到return 函数执行结束,后面的代码不会执行
多个返回值的时候,python会帮我们封装成一个元组类型

def mypow(x,y=2):
    print(x**y)
    return x**y,x+y
    print('!!!')  ##return后的代码不执行
a = mypow(4)
print(a)
print(mypow(5))
16
(16, 6)
25
(25, 7)

2.函数的作用域
局部变量:在函数内部定义的变量,只在函数内部起作用,函数执行结束后,变量会自动删除

a = 1
print('outside:',id(a))
def fun():
    a = 5  ##函数内部定义的变量
    print('inside:',id(a))
fun()
print(a)
print(id(a))
outside: 9326560
inside: 9326688  ##内部定义的变量仅在函数内部起作用
1
9326560

当定义a为全局变量时

a = 1
print('outside:',id(a))
def fun():
    global a  ##定义a为全局变量
    a = 5
    print('inside:',id(a))
fun()
print(a)
print(id(a))
outside: 9326560
inside: 9326688  ##函数内的变量作用于整个过程不会被删除
5
9326688

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

def cacluate(*a):
    sum = 0
    list = []
    for i in a:
        sum+=i
    average = sum/len(a)
    for k in a:
        if k > average:
            list.append(k)
    return (average,list)
a = cacluate(3,5,2,6)
print(a)
(4.0, [5, 6])

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

def word(a):
    big = 0
    small = 0
    for i in a:
        if i.isupper():
            big+=1
        elif i.islower():
            small+=1
    return(big,small)
b = word('ehllo WROLD')
print(b)
(5, 5)

3.编写函数, 接收一个列表(包含30个整形数)和一个整形数k, 返回一个新列表.
函数需求:将列表下标k之前对应(不包含k)的元素逆序;将下标k及之后的元素逆序;
例如:[1,2,3,4,5] 2 [2,1,5,4,3]

def func(list,k):
 nlist=[]
 if k < 0 or k > len(list):
     return 'Error'
 else:
     nlist.extend(list[:k][::-1]+list[k:][::-1])
     return nlist
a = func([1,2,5,3],2)
print(a)
 [2, 1, 3, 5]

4.编写一个名为collatz()的函数,它有一个名为number的参数。如果参数是偶数,那么collatz()就打印出number//2,并返回该值。如果number是奇数,collatz()就打印并返回3*number+1。然后编写一个程序,让用户输入一个整数,并不断对这个数调用collatz(),直到函数返回值1(令人惊奇的是,这个序列对于任何整数都有效,利用这个序列,你迟早会得到1!既使数学家也不能确定为什么。你的程序在研究所谓的“Collatz序列”,
它有时候被称为“最简单的、不可能的数学问题”)。
输入:
3
输出:
10
5
16
8
4
2
1

def collatz(number):
    if number == 1:
        exit()
    elif number%2 == 0:
        return number//2
    else:
        return 3*number+1
num = int(input('NUM:'))
while num>1:
    num = collatz(num)
    print(num)

结果测试

NUM:3
10
5
16
8
4
2
1

5.两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

team = ['x','y','z']
all_order = []
for i in team:
    for k in team:
        if k != i:
            for m in team:
                if m != i and m != k:
                    all_order.append([i,k,m])
for t in all_order:
    if t[0] != team[0] and t[2] != team[0] and t[2] != team[2]:
        print('a<---> %s,b<---> %s,c<---> %s' %(t[0],t[1],t[2]))

结果演示:

a<---> z,b<---> x,c<---> y

6.模拟轮盘抽奖游戏,轮盘分为三部分: 一等奖, 二等奖和三等奖;轮盘转的时候是随机的,如果范围在[0,0.08)之间,代表一等奖;如果范围在[0.08,0.3)之间,代表2等奖;如果范围在[0.3, 1.0)之间,代表3等奖。
模拟本次活动1000人参加, 模拟游戏时需要准备各等级奖品的个数.

import random
dict={
    '一等奖':(0,0.08),
    '二等奖':(0.08,0.3),
    '三等奖':(0.3,1.0)
}
def dict_fun():
    number = random.random()  ##获取0-1的随机数
    for k,v in dict.items():  ##判断转盘是几等奖
        if v[0]<=number<=v[1]:
            return k
result = {}  ##定义新字典,用来存储应设的奖品等级的个数
for i in range(1000):
    res=dict_fun()  ##定义key值
    if res not in result:  ##key值不在新字典里
        result[res]=1  ##对应的value值=1
    else:  ##key值在新字典里
        result[res]+=1  ##对应的value值+1
for k,v in result.items():
    print(k,'------',v)
三等奖 ------ 682
二等奖 ------ 239
一等奖 ------ 79
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值