函数及组合数据类型
函数的定义与使用
1、概述
- 函数的理解与定义
- 函数的使用与调用过程
- 函数的参数传递
- 函数的返回值
- 局部变量和全局变量
2、函数的理解与定义
# 圆周率函数调用
def pi ():
import random
a = 0
for i in range(10000):
x, y = random.random(), random.random()
b = pow(x ** 2 + y ** 2, 0.5)
if b <= 1:
a += 1
print(4 * a / 10000)
pi()
# 带参数的圆周率函数调用
def pi(num):
import random
a = 0
for i in range(num):
x, y = random.random(), random.random()
b = pow(x ** 2 + y ** 2, 0.5)
if b <= 1:
a += 1
print(4*a/num)
pi(100)
pi(1000)
pi(10000)
pi(100000)
# 圆周率函数调用返回值
def pi(num):
import random
a = 0
for i in range(num):
x, y = random.random(), random.random()
b = pow(x ** 2 + y ** 2, 0.5)
if b <= 1:
a += 1
return 4*a/num
a = pi(1000)
print(a)
2.1、函数的定义
函数是一段代码的表示
- 函数是一段具有特定功能的、可重用的语句组
- 函数是一种功能的抽象,一般函数表达特定功能
- 两个作用:降低编程难度和代码复用
def <函数名>(<参数(0个或多个)>) :
<函数体>
return <返回值>
- 函数定义时,所指定的参数是一种占位符
- 函数定义后,如果不经过调用,不会被执行
- 函数定义时,参数时输入、函数体是处理、结果是输出(Ipo)
3、函数的使用及调用过程
3.1、函数的调用
调用是运行函数代码的方式
def fact(n): # 函数的定义
s = 1
for i in range(1,n+1):
s *= i
return s
fact(10) # 函数的调用
- 调用时要给出实际参数
- 实际参数替换定义中的参数
- 函数调用后得到返回值
4、函数的参数传递
函数可以有参数,也可以没有,但是必须保留括号
def <函数名>(<非可选参数>,<可选参数>) :
<函数体>
return <返回值>
5、函数的返回值
函数可以返回0个或多个结果
return保留字用来传递返回值- 函数可以有返回值,也可以没有,可以有
return,也可以没有 return可以传递0个返回值,也可以传递任意多个返回值
组合数据类型
集合类型及操作
1、概述
- 集合类型定义
- 集合操作符
- 集合处理方法
- 集合类型应用场景
2、集合类型定义
集合是多个元素的无序组合
- 集合类型与数学中的集合概念一致
- 集合元素之间无序,每个元素唯一,不存在相同元素
- 集合元素不可更改,不能是可变数据类型
- 集合用大括号{}表示,元素间用逗号分隔
- 建立集合类型用{}或set{}
- 建立空集合类型,必须使用set{}
A = {"python", 123, ("python", 123)} # 使用{}建立集合
A
{('python', 123), 123, 'python'}
B = set("pypy123") # 使用set()建立集合
B
{'1', '2', '3', 'p', 'y'}
C = {"python", 123, "python", 123}
C
{123, 'python'}
3、集合操作符
3.1集合6个操作符
| 操作符及应用 | 描述 |
|---|---|
| S | T | 返回一个新集合,包括在集合S和T中的所有元素 |
| S - T | 返回一个新集合,包括在集合S但不在T中的元素 |
| S & T | 返回一个新集合,包括同时在集合S和T中的元素 |
| S ^ T | 返回一个新集合,包括集合S和T中的非相同元素 |
| S <= T或S < T | 返回True/False,判断S和T的子集关系 |
| S >= T或S > T | 返回True/False,判断S和T的包含关系 |
A = {"p", "y", 123}
B = set("pypy123")
A - B
{123}
A & B
{'p', 'y'}
A ^ B
{'1', 123, '2', '3'}
B - A
{'1', '2', '3'}
A | B
{'1', 123, '2', '3', 'p', 'y'}
4、集合处理方法
| 操作函数或方法 | 描述 |
|---|---|
| S.add(x) | 如果x不在集合S中,将x增加到S |
| S.discard(x) | 移除S中元素x,如果x不在集合S中,不报错 |
| S.remove(x) | 移除S中元素x,如果x不在集合S中,产生KeyError异常 |
| S.clear() | 移除S中所有元素 |
| S.pop() | 随机返回S的一个元素,更新S,若S为空产生KeyError异常 |
| S.copy() | 返回集合S的一个副本 |
| len(S) | 返回集合S的元素个数 |
| x in S | 判断S中元素x,x在集合S中,返回True,否则返回False |
| x not in S | 判断S中元素x,x不在集合S中,返回False,否则返回True |
| set(x) | 将其他类型变量x转变为集合类型 |
列表类型
列表类型及操作
1、列表类型定义
列表是序列类型的一种扩展
- 列表是一种序列类型,创建后可以随意被修改
- 使用方括号[]或list()创建,元素间用逗号,分隔
- 列表中各元素类型可以不同,无长度限制
2、列表类型操作函数和方法
| 函数或方法 | 描述 |
|---|---|
| ls.append(x) | 在列表ls最后增加一个元素x |
| ls.clear() | 删除列表ls中所有元素 |
| ls.copy() | 生成一个新列表,赋值ls中所有元素 |
| ls.insert(i,x) | 在列表ls的第i位置增加元素x |
| ls.pop(i) | 将列表ls中第i位置元素取出并删除该元素 |
| ls.remove(x) | 将列表ls中出现的第一个元素x删除 |
| ls.reverse() | 将列表ls中的元素反转 |
ls = ["cat", "dog", "tiger", 1024]
ls.append(1234)
ls
['cat', 'dog', 'tiger', 1024, 1234]
ls.insert(3, "human")
ls
['cat', 'dog', 'tiger', 'human', 1024, 1234]
ls.reverse()
ls
[1234, 1024, 'human', 'tiger', 'dog', 'cat']
字典类型及操作
1、概述
- 字典类型定义
- 字典处理函数及方法
- 字典类型应用场景
2、字典类型定义
2.1、字典类型定义
字典类型是“映射”的体现
- 键值对:键值是数据索引的扩展
- 字典是键值对的集合,键值对之间无序
- 采用大括号{}和dict()创建,键值对用冒号:表示
{<键1>:<值1>, <键2>:<值2>, … , <键n>:<值n>}
2.2、字典类型的用法
在字典变量中,通过键获得值
<字典变量> = {<键1>:<值1>, … , <键n>:<值n>}
<值> = <字典变量>[<键>]
<字典变量>[<键>] = <值>
[ ]用来向字典变量中索引或增加元素
2.3、字典类型定义和使用
d = {"中国": "北京", "美国": "华盛顿", "法国": "巴黎"}
d
{'中国': '北京', '美国': '华盛顿', '法国': '巴黎'}
d['中国']
'北京'
de = {}
type(de)
dict
字典处理函数及方法
| 函数或方法 | 描述 |
|---|---|
| del d[k] | 删除字典d中键k对应的数据值 |
| k in d | 判断键k是否在字典d中,如果在返回True,否则False |
| d.keys() | 返回字典d中所有的键信息 |
| d.values() | 返回字典d中所有的值信息 |
| d.items() | 返回字典d中所有的键值对信息 |
3.1字典类型操作
d = {"中国":"北京", "美国":"华盛顿", "法国":"巴黎"}
"中国" in d
True
d.keys()
dict_keys(['中国', '美国', '法国'])
d.values()
dict_values(['北京', '华盛顿', '巴黎'])
3.2 字典类型操作函数和方法
| 函数或方法 | 描述 |
|---|---|
| d.get(k, ) | 键k存在,则返回相应值,不在则返回值 |
| d.pop(k, ) | 键k存在,则取出相应值,不在则返回值 |
| d.popitem() | 随机从字典d中取出一个键值对,以元组形式返回 |
| d.clear() | 删除所有的键值对 |
| len(d) | 返回字典d中元素的个数 |
d = {"中国":"北京", "美国":"华盛顿", "法国":"巴黎"}
d.get("中国","伊斯兰堡")
'北京'
d.get("巴基斯坦","伊斯兰堡")
'伊斯兰堡'
d.popitem()
('法国', '巴黎')
jieba库的使用
1、jieba库基本介绍
1.1、jieba库概述
jieba是优秀的中文分词第三方库
- 中文文本需要通过分词获得单个的词语
- jieba是优秀的中文分词第三方库,需要额外安装
- jieba库提供三种分词模式,最简单只需掌握一个函数
1.2、jieba分词的原理
jieba分词依靠中文词库
- 利用一个中文词库,确定汉字之间的关联概率
- 汉字间概率大的组成词组,形成分词结果
- 除了分词,用户还可以添加自定义的词组
2、jieba库使用说明
2.1、jieba库常用函数
| 函数 | 描述 |
|---|---|
| jieba.lcut(s) | 精确模式,返回一个列表类型的分词结果 |
| jieba.lcut(s, cut_all=True) | 全模式,返回一个列表类型的分词结果,存在冗余 |
| jieba.lcut_for_search(s) | 搜索引擎模式,返回一个列表类型的分词结果,存在冗余 |
| jieba.add_word(w) | 向分词词典增加新词w |
import jieba
jieba.lcut("中国是一个伟大的国家")
['中国', '是', '一个', '伟大', '的', '国家']
jieba.lcut("中国是一个伟大的国家",cut_all=True)
['中国', '国是', '一个', '伟大', '的', '国家']
jieba.lcut("中华人民共和国是伟大的")
['中华人民共和国', '是', '伟大', '的']
jieba.lcut("中华人民共和国是伟大的",cut_all=True)
['中华', '中华人民', '中华人民共和国', '华人', '人民', '人民共和国', '共和', '共和国', '国是', '伟大', '的']
练习
name = " aleX"
# 1)移除 name 变量对应的值两边的空格,并输出处理结果
print(name.strip())
# 2)判断 name 变量对应的值是否以 "al" 开头,并输出结果
print(name.startswith('al'))
# 3)判断 name 变量对应的值是否以 "X" 结尾,并输出结果
print(name.endswith('x'))
# 4)将 name 变量对应的值中的 “l” 替换为 “p”,并输出结果
print(name.replace('l','p'))
# 5)将 name 变量对应的值根据 “l” 分割,并输出结果。
print(name.split('l'))
# 6)将 name 变量对应的值变大写,并输出结果
print(name.upper())
# 7)将 name 变量对应的值变小写,并输出结果
print(name.lower())
# 8)请输出 name 变量对应的值的第 2 个字符?
print(name[1])
# 9)请输出 name 变量对应的值的前 3 个字符?
print(name[:3])
# 10)请输出 name 变量对应的值的后 2 个字符?
print(name[-2:])
# 11)请输出 name 变量对应的值中 “e” 所在索引位置?
print(name.find('e'))
# 12)获取子序列,去掉最后一个字符。如: oldboy 则获取 oldbo。
a = 'oldboy'
print(a[:-1])
# 1.将以下数据存储为字典类型
# 数据:info = "name:Owen|age:18|gender:男"
# 结果:{'name': 'Owen', 'age': 18, 'gender': '男'}
info = {"name":"owen","age":"18","gender":"男"}
print(info)
# 2.完成数据的去重
# 数据:t3 = [1, 2, 1, 2, 3, 5, 9]
# 结果:t3 = [1, 2, 3, 5, 9]
t3 = [1, 2, 1, 2, 3, 5, 9]
print(set(t3))
# 3 有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中
即: {'k1': 大于66的所有值, 'k2': 小于66的所有值}
s1 = {11,22,33,44,55,66,77,88,99,90}
zd = {">=60":[],"<60":[]}
for i in s1:
if i >= 60:
zd[">=60"].append(i)
else:
zd["<60"].append(i)
print(zd)
# 4.完成录入电话本(选做)
# 需求:
'''
-- 从键盘中录入姓名(不区分大小写):
-- 姓名必须是全英文字母组成,不是则重新录入姓名,如果是q,代表退出
-- 从键盘中再录入电话:
-- 电话必须为字符串中是数字(如'12312312312')且长度必须是11位
-- 如果出现姓名相同,则保留最后一次电话号码
-- 形成的数据是有电话分组的,如:第一次录入Owen,13355667788,则会形成
-- {
'O': {
'Owen': '13355667788'
}
}
最终数据,分组名一定大写:
{
'E': {
'egon': '17788990000',
'engo': '16633445566'
},
'O': {
'Owen': '13355667788'
}
}
'''
record ={}
while True:
information = {}
name = input("请输入姓名:")
if name.isalpha() == False:
continue
elif name == 'q':
break
while True:
number = input("请输入电话号码:")
if number.isdigit() == False or len(number) != 11:
continue
else:
information[name]= number
break
if not name[0].upper() in record:
record.setdefault(name[0].upper(),information)
else:
record[name[0].upper()].setdefault(name,number)
print(record)

浙公网安备 33010602011771号