python——函数
一、定义函数
# 定义函数def say_hello(): print('hello') print('hi') # 调用函数,函数被调用之后才会生效say_hello()1234567
二、求和函数
def sum_(): num1 = 2 num2 = 3 result = num1 + num2 print('%d + %d = %d' %(num1,num2,result))sum_()123456
三、函数里嵌套函数
def hello(): print('say hello') def hi(): # 内函数必须调用才会被使用 print('say hi') hi()hello()123456
四、形参与实参
# 定义函数的时候定义的变量为形参(名字可以任意)def welcome(a): print('hello',a) # 真实的数据信息,调用函数的时候传递的参数为实参welcome('lala')welcome('haha')123456
五、四大参数
1、位置参数:
# 1.位置参数:形参和实参个数必须保持一致,最好按位置传参def getInfo(name,age): print(name,age) # 调用函数getInfo('haha',11) getInfo(name='lala',age=18)1234567
2、默认参数:
def mypow(x,y=2): # y的默认参数为2 print('乘积为:',x**y ) mypow(3) # 调用函数时,如果给y赋值,则y就取赋的值,如果没有给y赋值,则y就用默认值mypow(2,4)12345
3、可变参数:、
def mynum(*a): """ *a 是可变参数 a 是元组数据类型 """ sum = 0 for i in a: sum += i print('求和为:',sum)mynum(1,2,3,4,5)123456789
4、关键字参数
def getStuInfo(name,age,**kwargs): """ **kwargs是一个字典,可以传递任意多的key-value """ print(name,age) print(kwargs)getStuInfo('lala','18',subject= ['math','english','chinese'])1234567
六、函数的返回值
返回值:函数运行的结果,还需要进一步操作时,给返回值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)1234
七、变量的作用域
(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))123456789101112
八、练习
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)) 12345678910
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))1234567891011
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,smallprint(receive(input('请输入字符串:')))12345678910
4、模拟轮盘抽奖游戏
轮盘分为三部分:一等奖,二等奖,三等奖;轮盘转的时候是随机的
如果范围在[0,0.08)之间,代表一等奖
如果范围在[0.08,0.3)之间,代表二等奖
如果范围在[0.3,1)之间,代笔三等奖
模拟本次活动1000人参加,模拟游戏时需要准备各的等级奖品的个数
# 第一种方法import randomdef 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,a3dic = {}people = int(input('请输入参加活动的人数:'))a1,a2,a3 = award(people)dic={'一等奖':a1,'二等奖':a2,'三等奖':a3}print(dic)1234567891011121314151617181920
# 第二种方法: 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] += 1for k,v in resultDict.items(): print(k,v)123456789101112131415161718
4、腾讯笔试题:
题目需求:
对于一个十进制的正整数,定义f(n)为其各位数字的平方和,
如: f(13)=12+32=10 f(207)=22+32
下面给出三个正整数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,bs=input('请输入元素:')# 存储整型k,a,bli = []for i in s.split(): # 分离输入的字符串 li.append(int(i)) k,a,b = li # 进行判断是否满足条件count = 0for i in range(a,b+1): if k*f(i) == i: print('输出满足条件的数:',i) count+=1print('统计出来的个数为:',count)12345678910111213141516171819202122232425
赞 (0)