参数:形参 实参
形参的分类:位置参数 默认参数 可变参数 关键字参数
1.位置参数
#位置参数:形参和实参必须保持一致
def getInfo(name, age): # 按照位置传递参数
print(name, age)
getInfo(age=18, name='name')
getInfo(name=18,age='name')
输出:
name 18
18 name
2.默认参数
#默认参数:形参和实参可以不一致
def mypow(x, y=2): #设置 第二个参数y的默认值为2
""" #函数中输入''' ''',会自动弹出
求x的y次方
:param x:
:param y:
:return:
"""
print(x ** y)
mypow(4) # 在没有设置y值时,默认y=2
mypow(4, 3) # 设置了y值的时候,就执行x**y,这里就是4**3,而不是4**2
输出:
16
64
3.可变参数
def mySum(*args):
"""
需求:用户可以传递任意的值,计算数值的和
*args:是一个可变参数,可以传递任意参数类型[ ],{ },( )
args:是元组数据类型。函数在调用的时候内部自动组装成一个元组类型。
:param args:
:return:
"""
sum = 0
for item in args:
sum += item
print(sum)
mySum(1,2,3,4,5,6,7,8)
输出:
36
变换参数类型:
nums = [1,2,3,4,5,6] #list
nums1 = (2,5,6,7,9,10) #tuple
nums2 ={1,2,3,4,5,6,7,8} #set
mySum(*nums2) #*解包,把list,set,tuple的元素变成可变参数传进去
mySum(*nums1)
mySum(*nums)
输出:
36
39
21
#*的作用是解包
score = (12, 23, 56, 78, 90)
minscore, *middlescore, maxscore = score
print(*middlescore) #一个*为解包
print(middlescore)
输出:
23 56 78
[23, 56, 78]
4.关键字参数
-1#**kwargs 接收字典
def getStuInfo(name,age,**kwargs):
print(name,age)
print(kwargs)
#kwargs接收的时字典
getStuInfo('westos',11,hobbies=['code','running'],gender='female')
输出:
westos 11
{'hobbies': ['code', 'running'], 'gender': 'female'}
-2#如果要对字典进行解包。
(一个星号:获取key值)
d = dict(a=1,b=2)
print(*d) #一个星号,获取key值
输出:
a b
def getStuInfo(name,age,**kwargs):
print(name,age)
print(kwargs)
d = dict(a=1,b=2)
getStuInfo('westos',11,**d) #两个星号,**d解包把字典传入
输出:
westos 11
{'a': 1, 'b': 2}
练习:
题目需求:
对于一个十进制的正整数, 定义f(n)为其各位数字的平方和,如:
f(13) = 12 + 32 = 10
f(207) = 22 + 02 + 72 = 53
下面给出三个正整数k,a, b,你需要计算有多少个正整数n满足a<=n<=b,
且k*f(n)=n
输入:
第一行包含3个正整数k,a, b, k>=1, a,b<=1018, a<=b;
输出:
输出对应的答案;
范例:
输入: 51 5000 10000
输出: 3
def f(n):
# 1.先把数字转换成为字符串
n = str(n)
# 2.计算字符串中每个数的平方
sum = 0
for item in n:
sum += int(item)**2
return sum
def isOK(k,n):
if k * f(n) == n:
#调用了上面f(n)函数
return True
else:
return False
def main():
k = 51
a = 5000
b = 10000
count = 0
for i in range(a,b+1):
if isOK(k,i):
count += 1
print(count)
main()
输出:
3
用debug调试会更容易理解:
在isOK(k,n)函数中,判断 if k * f(n) == n:会进入f(n)函数,这里用debug进行了调试,返回结果sum再次进入isOK(k,n)的判断。
得到f(n)的返回值,进行判断。
如果觉得函数的方法不能理解,可以先看懂下面普通方法:
# 1.接收变量k,a,b
s = input('请输入(k,a,b):') # '51 5000 10000'
# 存储整型k,a,b
li= []
"""
例如:字符串拆分
st = 'hello python hellp world'
print st.split()
['hello', 'python', 'hellp', 'world']
"""
for item in s.split():
li.append(int(item))
#将字符串型转换为整型
k,a,b=li
#这里利用列表一次给三个变量赋值
# 2.进行判断是否满足条件
count = 0
for i in range(a,b+1):
if k*f(i) == i:
count +=1
print(count)