一、定义函数# 定义函数
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,small
print(receive(input('请输入字符串:')))12345678910 
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)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] += 1
for 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,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)12345678910111213141516171819202122232425 
|