python之函数

本文深入探讨了Python函数的各个方面,包括定义、求和、嵌套函数、形参与实参,详细阐述了位置参数、默认参数、可变参数和关键字参数的用法。此外,还介绍了函数的返回值和变量作用域,并给出了多个实践练习,如处理列表、计算平均值、统计字符串字符以及模拟轮盘抽奖游戏等,是学习Python函数的好资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.定义函数

# 定义函数
def say_hello():    
    print('hello')    
    print('hi')
    
# 调用函数,函数被调用之后才会生效
say_hello()

在这里插入图片描述

2.求和函数

def sum_():    
    num1 = 2    
    num2 = 3    
    result = num1 + num2    
    print('%d + %d = %d' %(num1,num2,result))
sum_()

在这里插入图片描述

3.函数里嵌套函数

def hello():    
    print('say hello')    
    def hi():   # 内函数必须调用才会被使用        
        print('say hi')    
hi()
hello()

在这里插入图片描述

4.形参与实参

# 定义函数的时候定义的变量为形参(名字可以任意)
def welcome(a):    
    print('hello',a) 
# 真实的数据信息,调用函数的时候传递的参数为实参
welcome('lala')
welcome('haha')

在这里插入图片描述

5.四大参数

(1)位置参数:
# 1.位置参数:形参和实参个数必须保持一致,最好按位置传参
def getInfo(name,age):    
    print(name,age)
    
# 调用函数
getInfo('haha',11) 
getInfo(name='lala',age=18)

在这里插入图片描述

(2)默认参数:
def mypow(x,y=2): # y的默认参数为2    
    print('乘积为:',x**y )
    
mypow(3)   # 调用函数时,如果给y赋值,则y就取赋的值,如果没有给y赋值,则y就用默认值
mypow(2,4)

在这里插入图片描述

(3)可变参数:
def mynum(*a):    
"""    
*a 是可变参数    a 是元组数据类型   
"""  
    sum = 0    
    for i in a:        
        sum += i    
        print('求和为:',sum)
mynum(1,2,3,4,5)

在这里插入图片描述

(4)关键字参数
def getStuInfo(name,age,**kwargs):    
    """    
    **kwargs是一个字典,可以传递任意多的key-value    
    """    
    print(name,age)    
    print(kwargs)
getStuInfo('lala','18',subject= ['math','english','chinese'])

在这里插入图片描述

6.函数的返回值

返回值:函数运行的结果,还需要进一步操作时,给返回值return用来返回函数执行结果, 如果没有返回值,默认为None,python可以间接返回多个值(返回了一个元组)一旦遇到return,函数执行结束,后面的代码不会执行
def mypow(x,y):    
    return x**y,x+y 
a,b = mypow(2,3)
print('x**y的值为:',a,'\nx+y的值为:',b)

在这里插入图片描述

7.变量的作用域

(1)局部变量:在函数内部定义的变量,只在函数内部生效,函数执行结束之后,变量自动删除
(2)全局变量
a=1   # 此处的a表示全局变量
print('outside:',id(a))
def fun():   
    # global表示声明局部变量为全局变量 
    global a    
    a=5    
    print('inside:',id(a))
fun()
print(a)
print(id(a))

在这里插入图片描述

8.练习

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

b = []
for i in range(30):    
    b.append(random.randint(1, 100))
print(b)
def nixu(b1,k):    
    if k<0 or k>len(b1):           
        return 'Error key'    
    print(k)    
    return b1[:k][::-1]+b1[k:][::-1]
print(nixu(b,8))  

在这里插入图片描述

(2)编写一个函数calculate,可以接收任意多个数,返回的是一个元组,元组的第一个值为所有参数的平均值,第二个值是大于平均值的所有数
def calculate(*a):    
    sum = 0    
    b=[]    
    for i in a:        
        sum += i    
        ave = sum / len(a)    
    for i in a:        
        if i > sum / len(a):            
        b.append(i)    
    return ave,b 
print(calculate(1,2,3,4,5))

在这里插入图片描述

(3)编写一个函数,接收字符串参数,返回一个元组,‘hello WORLD’,元组的第一个值为大写字母的个数,第二个值为小写字母个数
def receive(a):    
    big = 0    
    small = 0    
    for i in a:        
        if i.isupper():            
            big+=1        
        if i.islower():            
            small+=1    
    return big,small
print(receive(input('请输入字符串:')))

在这里插入图片描述

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

# 第一种方法
import random
def award(people):    
    a1=0    
    a2=0    
    a3=0    
    for i in range(people):        
        num = random.random()        
        if num < 0.08:            
            a1+=1        
        elif num >= 0.08 and i <0.3:            
            a2+=1        
        else:            
            a3+=1    
    return a1,a2,a3
dic = {}
people = int(input('请输入参加活动的人数:'))
a1,a2,a3 = award(people)
dic={'一等奖':a1,'二等奖':a2,'三等奖':a3}
print(dic)

在这里插入图片描述

# 第二种方法: 
def rewardFun():    
"""用户得奖等级"""     
    # 生成一个0~1之间的随机数    
    num = random.random()    
    # 判断随机转盘转的是几等奖    
    for k,v in rewardDict.items():        
        if v[0] <= num < v[1]:            
            return k
    resultDict = {}
for i in range(1000):    
     res = rewardFun()    
     if res not in resultDict:        
         resultDict[res] = 1    
     else:        
         resultDict[res] += 1
for k,v in resultDict.items():    
     print(k,v)

在这里插入图片描述

(4)腾讯笔试题:
题目需求:    
对于一个十进制的正整数,定义f(n)为其各位数字的平方和,
如:    f(13)=1**2+3**2=10    f(207)=2**2+3**2    
下面给出三个正整数k,a,b,你需要计算有多少个正整数n满足a<=n<=b,,
且k*f(n)=n
例如:
输入:51 5000 10000
输出:3

def f(n):    
    # 先把数字转换为字符串    
    n=str(n)    
    # 计算字符串中每个数的平方    
    sum = 0    
    for i in n:        
        sum += int(i) ** 2    
    return sum
    
# 接收变量k,a,b
s=input('请输入元素:')

# 存储整型k,a,b
li = []
for i in s.split():  # 分离输入的字符串    
li.append(int(i)) 
k,a,b = li 

# 进行判断是否满足条件
count = 0
for i in range(a,b+1):    
    if k*f(i) == i:        
        print('输出满足条件的数:',i)        
        count+=1
print('统计出来的个数为:',count)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值