<1>python内置数据结构
数值;bool;str;list; tuple; set; dict
可变数据类型和不可变数据类型
可变数据类型:list set dict(是否可以增删改查)
有序数据类型和无序数据类型
有序:str list tuple
无序:数值 bool set
python2:dict无序 python3中:dict有序
一般情况下:有序数据类型可以索引,切片,连接,重复 但是字典除外
<2>函数的理解和定义
1>函数的定义
def 函数名():
函数体
1>函数的理解
定义一个函数
在没有调用函数的情况下,函数是不会被执行的
函数里面嵌套函数
def func1(a):
# 定义函数时的变量称为形式参数,变量名可以任意起
print('hello %s' %(a))
# 调用函数时的参数称为实参,该参数必须是实际存在的
func1(12)
函数里面嵌套函数
def fentiao():
print('is fentiao....')
def westos():
print('westos')
westos()
fentiao()
形参和实参
def func1(a):
# 定义函数时的变量称为形式参数,变量名可以任意起
print('hello %s' %(a))
# 调用函数时的参数称为实参,该参数必须是实际存在的
func1(12)
func1('linux')
func1('python')
1>函数的应用
编写一个名为collatz()的函数,它有一个名为number的参数。
如果参数是偶数,那么collatz()就打印出number//2
如果number是奇数,collatz()就打印3*number+1
<3>函数成员动态添加删除和返回值
1>函数成员动态添加删除
def fun():
print(fun.x)
fun()
# 动态添加
fun.x = 3
fun()
# 动态删除
del fun.x
fun()
2>函数的返回值
[1]函数调用时一般有返回值,没有定义返回值的时候,python中默认返回None
def hello():
print('hello')
res = hello()
print(res)
[2]python函数中,只能返回一个值
def hello():
# return 返回的表达式或者变量
return 'hello'
res = hello()
print(res)
[3]如果非要返回多个值,会把返回的值封装为一个元组数据类型
def fun(a):
# 接收一个列表,求这个列表的最大值,平均值,最小值
max_num = max(a)
min_num = min(a)
avg_num = sum(a) / len(a)
# python函数中,只能返回一个值
# 如果非要返回多个值,会把返回的值封装为一个元组数据类型
return max_num,min_num,avg_num
variables = fun([1,2,34,5,67,89,120])
print(variables,type(variables))
def hello():
# return 返回的表达式或者变量
return 'hello'
3>函数的应用1
随机生成20个学生的成绩
判断这个20个学生的等级
3>函数的应用2
<4>函数形参之四大参数类型
参数:形参;实参
形参的分类:位置参数;默认参数;可变参数;关键字参数
位置参数:形参和实参必须保持一致
def getInfo(a, b):
pass
默认参数:形参和实参可以不一致
def getIn(a=4, b=3):
pass
可变参数:用户可以传多个元素
def get_Info(*args): # *args是一个可变参数
return args # args是元组数据
1.编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.
元组的第一个值为所有参数的平均值, 第二个值是大于平均值的所有数.
def cacluate(*args):
li = []
sum = 0
for i in args:
sum += i
avg = sum / len(args)
for i in args:
if i > avg:
li.append(i)
return avg,li
print(cacluate(1,3,5,4,67,43))
2.编写一个函数, 接收字符串参数, 返回一个元组,‘hello WROLD’
元组的第一个值为大写字母的个数, 第二个值为小写字母个数
def str(args):
lower = 0
upper = 0
for i in args:
if i.islower():
lower += 1
elif i.isupper():
upper += 1
return upper,lower
print(str('hello WORLD'))
3.编写函数, 接收一个列表(包含30个整型数)和一个整型数k, 返回一个新列表.
函数需求:
----将列对应(不包含k)下标k之前的元素逆序;
----将下标k之后的元素逆序;
def sort(li,k):
# 将下标k之前的元素放入li1
li1 = li[:k]
# 将下标k之后的元素放入li2
li2 = li[k+1:]
# 将下标k之前元素逆序
li1.sort(reverse=True)
#在下标k的位置添加下标k对应的元素
li1.insert(k,li[k])
# 将下标k之前元素逆序
li2.sort(reverse=True)
li3 = li1 + li2
return li3
li = list(range(30))
print(sort(li,5))
关键字参数:
def get_In(**kwargs): # **kwargs是一个字典
return kwargs #kwargs是字典类型
参数解包:*变量名, **变量名
对list tuple, set解包时, 只需要在变量前加*
如果要对字典解包, 一个星号,获取所有的key值
def getStuInfo(name,age,**kwargs):
print(name,age,kwargs)
d = dict(a=1,b=2)
# *:获取key值
print(*d)
# **:获取字典
getStuInfo('westos',11,**d)
3>函数应用1
题目需求:
对于一个十进制的正整数, 定义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
<5>函数的作用域和函数类型检测
1>函数的作用域
作用域:
全局作用域:作用于整个程序
局部作用域:在函数运行时生效,函数运行结束则释放
global关键字声明局部变量为全局变量
def fun():
# 通过global关键字声明局部变量为全局变量
# 函数执行完毕,变量依然生效
global num
num = 2
fun()
print(num)
1>函数应用1
1.Collatz序列
编写一个名为collatz()的函数,它有一个名为number的参数。
如果参数是偶数,那么collatz()就打印出number//2,并返回
该值。如果number是奇数,collatz()就打印并返回3*number+1。
然后编写一个程序,让用户输入一个整数,并不断对这个数
调用collatz(),直到函数返回值1(令人惊奇的是,这个序列
对于任何整数都有效,利用这个序列,你迟早会得到1!既使数学
家也不能确定为什么。你的程序在研究所谓的“Collatz序列”,
它有时候被称为“最简单的、不可能的数学问题”)。
- 输入:
3
- 输出:
10
5
16
8
4
2
1
2>函数类型检测
isinstance(x, (int, float)) 判断x是否是整形或者浮点型
def add(x, y):
if isinstance(x, (int, float)) and isinstance(y, (int, float)):
return x + y
else:
print('Error:')
res = add(2.5,2)
print(res)
1>函数应用2
编写函数,计算字符串匹配的准确率
<6>函数应用
1>求参数的平均值和大于平均值的所有数
编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.
元组的第一个值为所有参数的平均值, 第二个值是大于平均值的所有数.
2>字母数字统计
编写一个函数, 接收字符串参数, 返回一个元组,'ehllo WROLD'
元组的第一个值为大写字母的个数, 第二个值为小写字母个数.
3>更改列表顺序
编写函数, 接收一个列表(包含30个整形数)和一个整形数k, 返回一个新列表.
函数需求:
- 将列对应(不包含k)表下标k之前的元素逆序;
- 将下标k之后的元素逆序;
4>模拟轮盘抽奖游戏
# 轮盘分为三部分: 一等奖, 二等奖和三等奖;
# 轮盘转的时候是随机的,
# 如果范围在[0,0.08)之间,代表一等奖,
# 如果范围在[0.08,0.3)之间,代表2等奖,
# 如果范围在[0, 1.0)之间,代表3等奖,
# 模拟本次活动1000人参加, 模拟游戏时需要准备各等级奖品的个数.