1 函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率
1.1 定义一个函数
函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
def hello():
print('hello1')
print('hello2')
print('hello3')
hello()
def add():
num1 = 20
num2 = 30
result = num1 + num2
print('%d + %d = %d' %(num1,num2,result))
add()
函数的嵌套:
def westos():
print('westos')
def python():
print('python')
python()
westos()
1.2 函数中的参数
参数:形参 实参
形参:位置参数 默认参数 可变参数 关键字参数
1、位置参数
def getInfo(name,age):
print(name,age)
getInfo('westos',11)
getInfo(11,'westos')
2、默认参数
def mypow(x,y=2):
print(x**y)
mypow(4)
mypow(2,3)
3、可变参数
def mysum(*a):
sum = 0
for item in a:
sum += item
print(sum)
mysum(1,2,3,4,5)
4、关键字参数(以字典的形式导入)
def getInfo(name,age,**kwargs):
print(name,age)
print(kwargs)
getInfo('westos',18,gender='female',hobbies=['coding','running'])
1.3 函数的返回值
def mypow(x,y=2):
return x ** y, x + y
# print(x**y,x+y)
print('hello python')
a,b = mypow(3)
print(a,b)
1.4 局部变量和全局变量
a = 1
print('outside:',id(a))
def fun():
global a
a = 5
print('inside:',id(a))
fun()
print(a)
print(id(a))
def fun():
global a
a = 5
print('inside:',id(a))
fun()
a = 1
print('outside:',id(a))
print(a)
print(id(a))
示例:
"""
编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.
元组的第一个值为所有参数的平均值, 第二个值是大于平均值的所有数.
"""
def cacluate(*args):
avg = sum(args) / len(args)
up_avg = []
for item in args:
if item > avg:
up_avg.append(item)
return avg,up_avg
a = cacluate(1,2,3,4,5,6,7)
print(a)
示例:
"""
编写一个函数, 接收字符串参数, 返回一个元组,'ehllo WROLD'
元组的第一个值为大写字母的个数, 第二个值为小写字母个数.
"""
def fun(x):
upper_count = 0
lower_count = 0
for i in x:
if i.isupper():
upper_count += 1
elif i.islower():
lower_count += 1
else:
continue
return upper_count,lower_count
a = fun('ehllodfs WROLD')
print(a)
示例:
"""
编写函数, 接收一个列表(包含30个1~100之间的随机整形数)和一个整形
数k, 返回一个新列表.
函数需求:
- 将列表下标k之前对应(bu包含k)的元素逆序;
- 将下标k及之后的元素逆序;
[1,2,3,4,5] 2 [2,1,5,4,3]
"""
import random
def strfun(orglist,kvalue):
if kvalue < 0 or kvalue >= 30:
print("The value of k is out of range.")
else:
a1 = sorted(orglist[0:kvalue])
a2 = sorted(orglist[kvalue:30])
b = (a1[::-1], kvalue, a2[::-1])
return b
in_list = []
for i in range(30):
in_list.append(random.randint(1,100))
print(in_list)
result = strfun(in_list,20)
print(result)
示例:
"""
模拟轮盘抽奖游戏
# 轮盘分为三部分: 一等奖, 二等奖和三等奖;
# 轮盘转的时候是随机的,
# 如果范围在[0,0.08)之间,代表一等奖,
# 如果范围在[0.08,0.3)之间,代表2等奖,
# 如果范围在[0.3, 1.0)之间,代表3等奖,
# 模拟本次活动1000人参加, 模拟游戏时需要准备各等级奖品的个数.
"""
import random
rewardDict = {
'一等奖': (0,0.08),
'二等奖': (0.08,0.3),
'三等奖': (0.3,1)
}
def userfun():
num = random.random()
for k,v in rewardDict.items():
if v[0] <= num < v[1]:
return k
resultDict = {}
for i in range(1000):
res = userfun()
if res not in resultDict:
resultDict[res] = 1
else:
resultDict[res] += 1
for k,v in resultDict.items():
print(k,'--->',v)
示例:
"""
题目需求:
对于一个十进制的正整数, 定义f(n)为其各位数字的平方和,如:
f(13) = 1**2 + 3**2 = 10
f(207) = 2**2 + 0**2 + 7**2 = 53
下面给出三个正整数k,a, b,你需要计算有多少个正整数n满足a<=n<=b,
且k*f(n)=n
输入:
第一行包含3个正整数k,a, b, k>=1, a,b<=10**18, a<=b;
输出:
输出对应的答案;
范例:
输入: 51 5000 10000
输出: 3
"""
def f(n):
n1 = str(n)
sum = 0
for i in range(len(n1)):
sum += int(n1[i]) ** 2
return sum
numbers = input("Please input three positive integer:")
numbers_list = numbers.split()
list = []
for number in numbers_list:
list.append(int(number))
k,a,b = list
count = 0
if k>=1 and a>=1 and b>=1 and a<=10**18 and b<=10**18 and a<=b:
for n in range(a,b+1):
result = f(n)
if k*result==n:
count +=1
print(count)
else:
print("Please enter an integer that meets the requirements")
2 生成式
生成n个数的平方列表:
普通方式:
li = []
for i in range(1,11):
li.append(i ** 2)
print(li)
生成式方式:
print([i ** 2 for i in range(1,11)])