Python二级教程

来自CloudWiki
Cloud17讨论 | 贡献2018年12月12日 (三) 14:22的版本
跳转至: 导航搜索

2018年考试大纲:

http://www.exam8.com/computer/djks/dagang/201712/4156299.html

程序的基本编写方法

输入、输出和处理

Python程序的特点

  • 通用性
  • 语法简洁
  • 生态高产

r=25 area=3.1415*r*r print(area) print("{:.2f}".format(area))#只输出两位小数</nowiki>

from turtle import * color('red','red') begin_fill() for i in range(5): fd(200) rt(144) end_fill() done()

程序的格式框架

语法元素的名称

数据类型

字符串类型

字符串是Python里面重要的一种数据类型。

6)

>>> s="对酒当歌,人生几何?"
>>> s[1]
'酒'
>>> s[-1]
'?'
>>> s[3]
'歌'
>>> s[-3]
'几'


程序的语句元素

赋值语句

通过赋值语句,能够对一个变量赋值。

7)

>>> a=1024*32
>>> print(a)
32768
>>> a,b=100,10
>>> x,y="譬如朝露",1024
>>> print(x)
譬如朝露
>>> print(b)
10

基本输入输出函数

input()函数

输入函数。

8)

>>> a=input("请输入一个小数:")
请输入一个小数:123.456
>>> print(a)
123.456

eval()函数

将字符串转换成表达式。

9)

>>> b=eval("1.234")
>>> print(b)
1.234
>>> a=eval("1.2+3.4")
>>> print(a)
4.6

第6章 组合数据类型

  • Python6-1.png

组合数据类型的基本概念

集合类型概述

  • 直接将集合赋值给变量即可创建一个集合对象。
>>> a = {3, 5}                         #创建集合对象
>>> type(a)                            #查看对象类型
<class 'set'>
  • 也可以使用函数set()函数将列表、元组、字符串、range对象等其他可迭代对象转换为集合,如果原来的数据中存在重复元素,则在转换为集合的时候只保留一个;如果原序列或迭代对象中有不可哈希的值,无法转换成为集合,抛出异常。
>>> a_set = set(range(8, 14))                     #把range对象转换为集合
>>> a_set
{8, 9, 10, 11, 12, 13}
>>> b_set = set([0, 1, 2, 3, 0, 1, 2, 3, 7, 8])   #转换时自动去掉重复元素
>>> b_set
{0, 1, 2, 3, 7, 8}
>>> x = set()                                     #空集合
  • 集合运算:
>>> a_set = set([8, 9, 10, 11, 12, 13])
>>> b_set = {0, 1, 2, 3, 7, 8}
>>> a_set | b_set                     #并集
{0, 1, 2, 3, 7, 8, 9, 10, 11, 12, 13}
>>> a_set.union(b_set)                #并集
{0, 1, 2, 3, 7, 8, 9, 10, 11, 12, 13}
>>> a_set & b_set                     #交集
{8}
>>> a_set.intersection(b_set)         #交集
{8}
>>> a_set.difference(b_set)           #差集
{9, 10, 11, 12, 13}
>>> a_set - b_set
{9, 10, 11, 12, 13}
>>> a_set.symmetric_difference(b_set) #对称差集
{0, 1, 2, 3, 7, 9, 10, 11, 12, 13}
>>> a_set ^ b_set
{0, 1, 2, 3, 7, 9, 10, 11, 12, 13}

列表类型概述

  • 使用“=”直接将一个列表赋值给变量即可创建列表对象。
>>> a_list = ['a', 'b', 'mpilgrim', 'z', 'example']
>>> a_list = []                       #创建空列表
  • 也可以使用list()函数把元组、range对象、字符串、字典、集合或其他可迭代对象转换为列表。
>>> list((3,5,7,9,11))                #将元组转换为列表
[3, 5, 7, 9, 11]
>>> list(range(1, 10, 2))             #将range对象转换为列表
[1, 3, 5, 7, 9]
>>> list('hello world')               #将字符串转换为列表
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
>>> list({3,7,5})                     #将集合转换为列表
[3, 5, 7]</nowiki>

列表的索引

  • 创建列表之后,可以使用整数作为下标来访问其中的元素,其中0表示第1个元素,1表示第2个元素,2表示第3个元素,以此类推;列表还支持使用负整数作为下标,其中-1表示最后1个元素,-2表示倒数第2个元素,-3表示倒数第3个元素,以此类推。
>>> x = list('Python')             #创建类别对象
>>> x
['P', 'y', 't', 'h', 'o', 'n']
>>> x[0]                           #下标为0的元素,第一个元素
'P'
>>> x[-1]                          #下标为-1的元素,最后一个元素
'n'
  • Python6-2.png
  • 可以使用遍历循环对列表类型进行遍历操作
>>> x = list('Python')
       
>>> for i in x:
       print(i)

       
P
y
t
h
o
n

列表类型的操作

列表的操作函数

  • max()、min()函数用于返回列表中所有元素的最大值和最小值,
  • sum()函数用于返回列表中所有元素之和;
  • len()函数用于返回列表中元素个数,zip()函数用于将多个列表中元素重新组合为元组并返回包含这些元组的zip对象;
  • enumerate()函数返回包含若干下标和值的迭代对象;
  • map()函数把函数映射到列表上的每个元素,filter()函数根据指定函数的返回值对列表元素进行过滤;
  • all()函数用来测试列表中是否所有元素都等价于True,any()用来测试列表中是否有等价于True的元素。
  • 标准库functools中的reduce()函数以及标准库itertools中的compress()、groupby()、dropwhile()等大量函数也可以对列表进行操作。
>>> x = list(range(11))              #生成列表
>>> import random
>>> random.shuffle(x)                #打乱列表中元素顺序
>>> x
[0, 6, 10, 9, 8, 7, 4, 5, 2, 1, 3]
>>> all(x)                           #测试是否所有元素都等价于True
False
>>> any(x)                           #测试是否存在等价于True的元素
True
>>> max(x)                           #返回最大值
10
>>> max(x, key=str)                  #按指定规则返回最大值
9
>>> min(x)
0
>>> sum(x)                    #所有元素之和
55
>>> len(x)                    #列表元素个数
11

列表的操作方法

  • append()用于向列表尾部追加一个元素,insert()用于向列表任意指定位置插入一个元素
>>> x = [1, 2, 3]
>>> x.append(4)                     #在尾部追加元素
  • pop()用于删除并返回指定位置(默认是最后一个)上的元素;remove()用于删除列表中第一个值与指定值相等的元素;clear()用于清空列表中的所有元素。这3个方法也属于原地操作
>>> x = [1, 2, 3, 4, 5, 6, 7]
>>> x.pop()                        #弹出并返回尾部元素
7
>>> x.pop(0)                       #弹出并返回指定位置的元素
1
>>> x.clear()                      #删除所有元素
>>> x
[]
>>> x = [1, 2, 1, 1, 2]
>>> x.remove(2)                    #删除首个值为2的元素
>>> del x[3]                       #删除指定位置上的元素
>>> x
[1, 1, 1]
  • 列表对象的sort()方法用于按照指定的规则对所有元素进行排序;reverse()方法用于将列表所有元素逆序或翻转。
>>> x = list(range(11))                       #包含11个整数的列表
>>> import random
>>> random.shuffle(x)                         #把列表x中的元素随机乱序
>>> x
[6, 0, 1, 7, 4, 3, 2, 8, 5, 10, 9]
>>> x.sort()                                  #按默认规则排序
>>> x
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> x.reverse()  
  • copy复制列表,而直接赋值的方法不产生新列表
>>> x = list(range(11))
       
>>> y = x.copy()
       
>>> x.clear()
       
>>> print(y)
       
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> x = list(range(11))
       
>>> y = x
       
>>> x.clear()
       
>>> print(y)
       
[]

字典类型

字典的定义

字典的索引

  • 字典中的每个元素表示一种映射关系或对应关系,根据提供的“键”作为下标就可以访问对应的“值”,如果字典中不存在这个“键”会抛出异常。
>>> aDict = {'age': 39, 'score': [98, 97], 'name': 'Dong', 'sex': 'male'}
>>> aDict['age']                     #指定的“键”存在,返回对应的“值”
39
>>> aDict['address']                 #指定的“键”不存在,抛出异常
KeyError: 'address'

字典类型的操作

字典的操作函数

>>> d={"01":"小明","02":"小红","03":"小白"}
       
>>> len(d)
       
3
>>> min(d)
       
'01'
>>> max(d)
       
'03'
>>> d = dict()
       
>>> print(d)
       
{}

字典的操作方法

  • d.keys()返回字典中的所有键信息。
>>> d={"01":"小明","02":"小红","03":"小白"}
       
>>> d.keys()
       
dict_keys(['01', '02', '03'])
>>> list(d.keys())
       
['01', '02', '03']
  • d.values()返回字典中的所有值信息
>>> d.values()
       
dict_values(['小明', '小红', '小白'])
>>> list(d.values())
       
['小明', '小红', '小白']
  • d.items()返回字典中的所有键值对信息
>>> d.items()
       
dict_items([('01', '小明'), ('02', '小红'), ('03', '小白')])
>>> list(d.items())
       
[('01', '小明'), ('02', '小红'), ('03', '小白')]
  • 字典对象提供了一个get()方法用来返回指定“键”对应的“值”,并且允许指定该键不存在时返回特定的“值”
  • 相比于get(),pop()在取出相应值之后,从字典中删除对应的键值对。
>>> d.get('01')
       
'小明'
>>> d.get('04','不存在')
       
'不存在'
>>> d.pop('01')
       
'小明'
>>> d.items()
 
dict_items([('02', '小红'), ('03', '小白')])
>>> d.pop('04','不存在')
       
'不存在'

>>> d={"01":"小明","02":"小红","03":"小白"}</nowiki>

  • d.popitem()随机从字典中取出一个键值对。
>>> print(d.popitem())
       
('03', '小白')
>>> d
  • 可以用del来删除
> >> d       
{ '01': '小明', '02': '小红'}
>>> del d['01']
       
>>> d
  • 用in来判断是否存在:
{'02': '小红'}
>>> '02' in d
       
True
>>> '01' in d
       
False
  • 用for来进行遍历:
>>> d={"01":"小明","02":"小红","03":"小白"}
       
>>> for k in d:
       print(k,d.get(k))

       
01 小明
02 小红
03 小白
>>> 

实例解析:文本词频统计

我们可以采用字典来解决制品统计问题。

  • 输入:从文件中读取一篇文章。
  • 处理:采用字典数据结构,统计词语出现频率。
  • 输出:文章中最常出现的十个单词及出现次数。

英文词频统计

英文文本以空格或标点符号来分隔词语获得单词并统计数量相对容易。

代码:

#e10.1CalHamlet.py
def getText():
    txt = open("hamlet.txt", "r").read()
    txt = txt.lower()
    for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':
        txt = txt.replace(ch, " ")   #将文本中特殊字符替换为空格
    return txt
hamletTxt = getText()
words  = hamletTxt.split()
counts = {}
for word in words:			
    counts[word] = counts.get(word,0) + 1
items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True) 
for i in range(10):
    word, count = items[i]
    print ("{0:<10}{1:>5}".format(word, count))

中文词频分析

jieba库的使用

中文词频分析

#e10.3CalThreeKingdoms.py
import jieba
excludes = {}#{"将军","却说","丞相"}
txt = open("三国演义.txt", "r", encoding='utf-8').read()
words  = jieba.lcut(txt)
counts = {}
for word in words:
    if len(word) == 1:  #排除单个字符的分词结果
        continue
    else:
        counts[word] = counts.get(word,0) + 1
for word in excludes:
    del(counts[word])
items = list(counts.items())
items.sort(key=lambda x:x[1], reverse=True) 
for i in range(15):
    word, count = items[i]
    print ("{0:<10}{1:>5}".format(word, count))