计算机执行源程序的两种方式:编译和解释
执行编译的过程叫编译器
执行解释过程的程序叫解释器
根据执行方式不同,编程语言分为:静态语言和脚本语言
优化更充分,运行速度更快
维护更灵活,跨平台操作
I: input 输入,程序的输入
P: process 处理,程序的主要逻辑
O: output 输出,程序的输出
TempStr = input("请输入带有符号的温度值:")
if TempStr[-1] in ['F', 'f']:
C = (eval(TempStr[0:-1]) - 32)/1.8
print("转换后的温度是{:.2f}C".format(C))
elif TempStr[-1] in ['C', 'c']:
F = 1.8 * (eval(TempStr[0:-1])) + 32
print("转换后的温度是{:.2f}F".format(F))
else:
print("输出格式错误")
变量:用来保存和表示数据类型的占位符号
命名规则:字母数字下划线组成,区分大小写,首字母不能是数字,不能是关键字
单行注释:# 多行注释:‘’’ ‘’’
整数,字符串,浮点数,列表
input() 从控制台获得用户输入的函数
print() 以字符形式向控制台输出结果的函数
eval() 去掉参数最外侧引号并执行余下语句的函数
eval("1+2") # 3
eval("'1.2'") # '1.2'
eval("Hello") # Hello
Python是唯一的"超级语言"
特点:通用性,简洁性,生态性
超级语言: 粘性整合已有程序,具备庞大计算生态
高级语言: 接近自然语言,编译器,与CPU型号无关
机器语言: 代码直接执行,与CPU型号有关
汇编语言: 有助记符,汇编器,与CPU型号有关
import turtle
turtle.setup(650, 350, 200, 200)
turtle.penup()
turtle.fd(-250)
turtle.pendown()
turtle.pensize(25)
turtle.pencolor('violet')
turtle.seth(-40)
for i in range(4):
turtle.circle(40, 80)
turtle.circle(-40, 80)
turtle.circle(40, 80/2)
turtle.fd(40)
turtle.circle(16, 180)
turtle.fd(40 * 2/3)
turtle.done()
# 方案一:turtle.
import turtle
# 方案二:直接调用
from turtle import *
# 方案三:t.
import turtle as t
# 绘图窗口在屏幕中的布局
turtle.setup(800, 400, 0, 0) # 宽,高,x坐标,y坐标(默认中心)
# 运动控制
turtle.goto(100, 100) # 移动到坐标位置
turtle.circle() # 绘制圆:半径,角度(默认360)
turtle.fd() # 前进
turtle.bk() # 后退
# 方向控制
turtle.seth() # 改变方向,绝对角度
turtle.left() # 左转,逆时针相对角度
turtle.right() # 右转,顺时针相对角度
# 色彩模式
turtle.colormode(1.0) # RGB小数模式
turtle.colormode(255) # RGB整数模式
# 画笔控制
turtle.penup() # 抬笔
turtle.pendown() # 落笔
turtle.pensize(20) # 画笔宽度
turtle.pencolor('purple') # 画笔颜色,紫色的三种表现形式
turtle.pencolor(0.63, 0.13, 0.94)
turtle.pencolor(160, 32, 240)
# 拓展函数
turtle.bgcolor('black') # 窗口背景色
turtle.color('red', 'white') # 画笔颜色,填充颜色
turtle.begin_fill() # 开始填充
turtle.end_fill() # 结束填充
turtle.write('文本', font=('Arial',20,'normal')) # 打印文本,字体(中/英),大小,正常
turtle.hideturtle() # 隐藏海龟图标
turtle.speed() # 绘制速度,0-10
turtle.done() # 停止画笔绘制,不关闭绘图窗口
for i in range(5):
print("Hello:", i)
pow()函数:计算次方,可以嵌套
pow(2,3) # 2的3次方
pow(2,pow(2,3))
四种进制: 十进制,二进制(0b
),八进制(0o
),十六进制(0x
)
round()函数:四舍五入
round(3.1415,2) # 保留两位小数
复数类型: z = a + bj
,其中a为实部,b为虚部
z = 5 + 2j
print(z.real) # 获取实部
print(z.imag) # 获取虚部
+,-,*,/,//(整除),%(取模),**(幂运算)
abs(-10) # 绝对值
divmod(10,3) # 商余,输出10//3,10%3
max(1,9,5,4) # 最大值
min(3,5,9,6) # 最小值
int(12.24) # 转化为整数,输出12
float(12) # 转化为浮点数,输出12.0
complex(4) # 变复数,输出(4+0j)
# 工作(提升0.01)五天,休息(下降0.01)两天
dayup = 1.0
dayfactor = 0.01
for i in range(365):
if i % 7 in [6,0]:
dayup = dayup * (1-dayfactor)
else:
dayup = dayup * (1+dayfactor)
print('工作日的力量:{:.2f}'.format(dayup))
# 每天努力0.01,1.01^365=37.78,作5休2时工作日要怎么努力才能达到像每天努力0.01的程度
def dayUP(df):
dayup = 1.0
for i in range(365):
if i % 7 in [6,0]:
dayup = dayup * (1-0.01)
else:
dayup = dayup * (1+df)
return dayup
dayfactor = 0.01
while dayUP(dayfactor) < 37.78:
dayfactor += 0.001
print('工作日要付出的努力参数是:{:.2f}'.format(dayfactor))
索引:str[2]
切片:str[0:-1]
# 顾头不顾尾
str = "0123456789"
str[:3] # 012
str[1:8:2] # 步长为2,结果为1357
str[::-1] # 9876543210
print("这里有一个引号(\")") # 这里有一个引号(")
\b # 回退
\n # 换行(光标移动到下行首)
\r # 回车(光标移动到本行首)
x + y 连接两个字符串x和y
x * n 复制n次字符串x
x in s 如果x是s的子串返回True,否则False
len("abcdef") # 字符串长度,6
str(123) # 强制转换为字符串类型,"123"
hex(425) # 十六进制,"0x1a9"
oct(425) # 八进制,"0o651"
chr(10004) # Unicode变字符,√
ord("√") # 字符变Unicode,10004
str.lower('ABC') # 变小写,abc
str.upper('abc') # 变大写,ABC
str = "A,B,C"
str.split(',') # 返回列表,以‘,’进行分割,['A','B','C']
str = "an apple a day"
str.count('a') # 统计个数,4
str.replace('a','A') # 替换,An Apple A dAy
str.center(20,'*') # 根据所设宽度居中,***an apple a day***
str = "python"
str.strip('pn') # 去掉左侧和右侧的字符
str.join('123') # 将str插进字符串中,1python2python3
: 填充 对齐(<左[默认]>右^中) 宽度
print("{0:=^10}".format('python')) # ==python==
print("{0:*>10}".format('python')) # ****python
print("{0:-<10}".format('python')) # python----
: ,(千位分隔符) .(精度) f(类型)
print("{0:,.2f}".format(1234.56)) # 保留两位小数,1,234.56
print("{0:b},{0:c},{0:d},{0:o},{0:x}".format(123)) # 整数类型,1111011,{,123,173,7b
print("{0:e},{0:f},{0:%}".format(12.3)) # 浮点数类型,1.230000e+01,12.300000,1230.000000%
调用time库:import time
print(time.time()) # 1637232147.2817955
print(time.ctime()) # Thu Nov 18 18:42:27 2021
print(time.gmtime()) # time.struct_time(tm_year=2021, tm_mon=11, tm_mday=18, tm_hour=10, tm_min=42, tm_sec=27, tm_wday=3, tm_yday=322, tm_isdst=0)
t = time.gmtime()
s = time.strftime("%Y-%m-%d %H:%M:%S", t)
print(s) # 2021-11-18 11:01:25
print(time.strptime(s, "%Y-%m-%d %H:%M:%S")) # time.struct_time(tm_year=2021, tm_mon=11, tm_mday=18, tm_hour=11, tm_min=1, tm_sec=25, tm_wday=3, tm_yday=322, tm_isdst=-1)
start = time.perf_counter() # 记录开始时间
time.sleep(1.2) # 休眠1.2秒
end = time.perf_counter() # 记录结束时间
end - start
start = time.procoss_time() # 不包含sleep
end = time.procoss_time()
end - start
import time
scale = 50
print('执行开始'.center(scale//2, '-'))
start = time.perf_counter()
for i in range(scale+1):
a = '*' * i
b = '.' * (scale-i)
c = (i/scale)*100
dur = time.perf_counter()-start
print('\r{:^3.0f}%[{}->{}]{:.2f}s'.format(c, a, b, dur), end='')
time.sleep(0.1)
print('\n'+'执行结束'.center(scale//2, '-'))
流程图的基本元素是:判断框
单分支:if
二分支:if - else
多分支:if - elif - else
表达式 if 条件 else 表达式
a, b = 10, 5
print('正确') if a > b else print('错误') # 正确
== 等于,!= 不等于,>,>=,<,<=
and 逻辑与,or 逻辑或,not 逻辑非
# 方案一
try:
num = eval(input("请输入一个整数:"))
print(num)
except:
print("输入的不是整数")
# 方案二
try:
num = eval(input("请输入一个整数:"))
print(num)
except NameError:
print("输入的不是整数")
# 高级使用
try - except - else - finally
height, weight = eval(input("请输入身高(米)和体重(公斤)[逗号隔开]:"))
bmi = weight/pow(height, 2)
print("BMI数值为{:.2}".format(bmi))
who, nat = "", ""
if bmi < 18.5:
who, nat = "偏瘦", "偏瘦"
elif 18.5 <= bmi < 24:
who, nat = "正常", "正常"
elif 24 <= bmi < 25:
who, nat = "正常", "偏胖"
elif 25 <= bmi < 28:
who, nat = "偏胖", "偏胖"
elif 28 <= bmi < 30:
who, nat = "偏胖", "肥胖"
else:
who, nat = "肥胖", "肥胖"
print("BMI指标为:国际'{0}',国内'{1}'".format(who, nat))
for i in range(5):
print(i)
for i in range(1,6):
print(i)
for i in range(1,6,2):
print(i)
for s in 'python':
print(s, end=',')
for item in [12, 'python', 34]: # 列表遍历循环
print(item, end=',')
for line in fi: # 文件遍历循环
print(line)
while True:
break 结束本层循环(可以终结一个循环)
continue 结束本次循环
调用random库:import random
作用:random库主要用于生成随机数
# 基本
random.seed(10) # 给定随机数种子,产生种子10对应的序列
random.random() # [0.0到1.0)间的随机小数
# 扩展
random.uniform(10, 20) # [10到20]间的随机小数
random.randint(10, 20) # [10到20]间的随机整数
random.randrange(10, 20, 2) # [10到20]间步长为2的随机整数
random.getrandbits(8) # 8位的随机整数
random.choice([1, 2, 3]) # 随机选择列表内的一个元素
ls = [1, 2, 3, 4]
random.shuffle(ls) # 将列表内元素顺序打乱
print(ls)
from random import random
from time import perf_counter
darts = 1000*1000
hits = 0.0
start = perf_counter()
for i in range(1, darts+1):
x, y = random(), random()
dist = pow(x ** 2 + y ** 2, 0.5)
if dist <= 1.0:
hits = hits+1
pi = 4 * (hits/darts)
print("圆周率是:{}".format(pi))
print("运行时间是:{:.5}s".format(perf_counter()-start))
函数作用:降低编程难度和代码复用
def fact(n): # 函数名和参数
s = 1
for i in range(1, n+1):
s *= i
return s # 返回值
fact(10) # 函数调用
def fact(): # 参数可以没有,必须保留括号
print("Python")
def fact(*n): # 可变参数(不确定参数数量时可设置可变参数)
s = 0
for i in n:
s += i
return s
print(fact(1, 2, 3, 4)) # 10
参数传递的两种方式:位置传递,名称传递
可通过global
声明全局变量
组合数据类型:如果局部变量未真实创建,则是全局变量
ls = ['A', 'B']
def fact(a):
ls.append(a) # ls未真实创建,等同于全局变量
return
fact('C') # 全局变量ls被修改
print(ls) # ['A', 'B', 'C']
ls = ['A', 'B']
def fact(a):
ls = [] # ls真实创建,是局部变量
ls.append(a)
return
fact('C') # 全局变量ls未修改
print(ls) # ['A', 'B']
匿名函数,用于定义简单且能在一行内表示的函数
f = lambda x,y : x+y
print(f(10, 15)) # 25
f = lambda : "Python"
print(f()) # Python
import turtle,time
def drawGap(): # 绘制数码管间隔
turtle.penup()
turtle.fd(5)
def drawLine(draw): # 绘制单段数码管
drawGap()
turtle.pendown() if draw else turtle.penup()
turtle.fd(40)
drawGap()
turtle.right(90)
def drawDigit(digit): # 根据数字绘制七段数码管
drawLine(True) if digit in [2, 3, 4, 5, 6, 8, 9] else drawLine(False)
drawLine(True) if digit in [0, 1, 3, 4, 5, 6, 7, 8, 9] else drawLine(False)
drawLine(True) if digit in [0, 2, 3, 5, 6, 8, 9] else drawLine(False)
drawLine(True) if digit in [0, 2, 6, 8] else drawLine(False)
turtle.left(90)
drawLine(True) if digit in [0, 4, 5, 6, 8, 9] else drawLine(False)
drawLine(True) if digit in [0, 2, 3, 5, 6, 7, 8, 9] else drawLine(False)
drawLine(True) if digit in [0, 1, 2, 3, 4, 7, 8, 9] else drawLine(False)
turtle.left(180)
turtle.penup() # 为绘制后续数字确定位置
turtle.fd(20) # 为绘制后续数字确定位置
def drawDate(date): # 获得要输入的数字
turtle.pencolor('red')
for i in date:
if i == '-':
turtle.write('年', font=('Arial', 18, 'normal'))
turtle.pencolor('green')
turtle.fd(40)
elif i == '=':
turtle.write('月', font=('Arial', 18, 'normal'))
turtle.pencolor('blue')
turtle.fd(40)
elif i == '+':
turtle.write('日', font=('Arial', 18, 'normal'))
else:
drawDigit(eval(i)) # 通过eval()函数将数字变为整数
def main():
turtle.setup(800, 350, 200, 200)
turtle.penup()
turtle.fd(-300)
turtle.pensize(5)
drawDate(time.strftime('%Y-%m=%d+',time.gmtime()))
turtle.hideturtle()
turtle.done()
main()
模块内部紧耦合,模块之间松耦合
紧耦合: 两部分之间交流很多,无法独立存在
松耦合: 两部分之间交流较少,可以独立存在
函数定义中调用函数自身的方式
关键特征:①链条:计算过程存在链条 ②基例:存在一个或多个不需要再次递归的基例
函数 + 分支结构
# 递归求阶乘
def fact(n):
if n == 0:
return 1 # 基例
else:
return n * fact(n-1) # 链条
# 字符串反转
s = input('请输入一个字符串:')
def reverse(s):
if len(s) == 1:
return s
else:
return reverse(s[1:])+s[0]
print(reverse(s))
# 斐波那契数列
def f(n):
if n == 1 or n == 2:
return 1
else:
return f(n-1) + f(n-2)
# 汉诺塔
count = 0
def hannoi(n, src, dst,mid):
global count
if n == 1:
print('{}:{}->{}'.format(1, src, dst))
count += 1
else:
hannoi(n-1, src, mid, dst)
print('{}:{}->{}'.format(n, src, dst))
count += 1
hannoi(n-1, mid, dst, src)
hannoi(3, 'A', 'C', 'B')
print(count)
作用:将.py文件转换成可执行的exe文件
安装(cmd命令行):pip install pyinstaller
打开cmd命令行,cd 进入文件夹
Pyinstaller -F 文件名.py # 打包exe
Pyinstaller -F -w 文件名.py # 不带控制台的打包
Pyinstaller -F -w -i 图标.ico 文件名.py # 打包指定exe图标打包
import turtle
def koch(size, n):
if n == 0:
turtle.fd(size)
else:
for angle in [0, 60, -120, 60]:
turtle.left(angle)
koch(size/3, n-1)
def main():
turtle.setup(600, 600)
turtle.penup()
turtle.goto(-200, 100)
turtle.pendown()
turtle.pensize(2)
level = 3 # 3阶科赫雪花,阶数
koch(400, level)
turtle.right(120)
koch(400, level)
turtle.right(120)
koch(400, level)
turtle.hideturtle()
turtle.done()
main()
集合元素特点:无序,唯一,不可变
# 创建集合:set,{}
A = {'Python', 123, ('Python', 123)} # {123, 'Python', ('Python', 123)}
B = set('Py12312') # {'1', '2', 'y', '3', 'P'}
C = {'Python', 123, 'Python', 123} # {123, 'Python'}
A = {'p', 'y', 123}
B = set('pypy123')
print(A - B) # 差
print(A | B) # 并
print(A & B) # 交
print(A ^ B) # 补
print(A < B) # 返回False,同理:A <= B,A > B,A >= B
A |= B # A与B的并集赋值给A,同理:A -= B,A &= B,A ^= B
A = {'p', 'y', 123}
A.add(4) # 新增元素
A.discard(4) # 删除元素,不存在不报错
A.remove(4) # 删除元素,不存在则报错
A.clear() # 删除所有元素
print(A.pop()) # 随机删除一个元素,集合为空则报错
print(A.copy()) # 返回集合副本
pirnt(len(A)) # 返回元素个数
123 in A # True
123 not in A # False
B = "Python"
set(B) # 强制转换为集合类型
应用场景: 包含关系比较,数据去重
序列是具有先后关系的一组元素,是一个基类类型
X in s
X not in s
s + t # 连接两个序列
s * n # 序列s复制n次
s[i] # 索引
s[i:j]或s[i:j:k] # 切片
len(s) # 序列长度
min(s) # 最小元素
max(s) # 最大元素
s.index(x)或s.index(x,i,j) # 序列从i到j,x第一次出现的位置
s.count(x) # x出现的个数
是序列类型的一种扩展,创建后不能修改
# 创建元组:(),无括号,tuple()
c = 'cat', 'dog', 123 # ('cat', 'dog', 123)
d = ('tiger', c) # ('tiger', ('cat', 'dog', 123))
是序列类型的一种扩展,创建后可以修改
# 创建列表:[],list()
ls = ['cat', 'dog', 123]
lt = ls
print(lt) # ['cat', 'dog', 123],[]是真正列表,赋值仅传递引用
# 操作函数
ls = [1, 2, 3, 4, 5]
ls[2] = 0 # [1, 2, 0, 4, 5]
lt = [6, 7, 8]
ls[0:5:2] = lt # [6, 2, 7, 4, 8]
del ls[2] # [1, 2, 4, 5]
del ls[0:5:2] # [2, 4]
ls += lt # [1, 2, 3, 4, 5, 6, 7, 8]
ls *= 2 # [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
ls.append(x) # 末尾添加一个元素x
ls.clear() # 删除所有元素
la = ls.copy()
ls.insert(i,x) # 在i位置增加元素x
print(ls.pop(i))
ls.remove(2) # [1, 3, 4, 5]
ls.reverse() # 反转元素,[5, 4, 3, 2, 1]
序列类型应用场景: 元组和列表
数据保护:若不希望数据被程序改变,可转换成元组类型
ls = ['cat', 'dog', 123]
lt = tuple(ls)
print(lt) # ('cat', 'dog', 123)
def getNum(): # 获取用户不定长度的输入
nums = []
iNumStr = input("请输入数字(回车退出):")
while iNumStr != "":
nums.append(eval(iNumStr))
iNumStr = input("请输入数字(回车退出):")
return nums
def mean(numbers): # 计算平均值
s = 0.0
for num in numbers:
s = s + num
return s/len(numbers)
def dev(numbers, mean): # 计算方差
sdev = 0.0
for num in numbers:
sdev = sdev+(num-mean)**2
return pow(sdev/(len(numbers)-1), 0.5)
def median(numbers): # 计算中位数
sorted(numbers)
size = len(numbers)
if size % 2 == 0:
med = (numbers[size//2-1]+numbers[size//2])/2
else:
med = numbers[size//2]
return med
n = getNum()
m = mean(n)
print("平均值:{},方差:{:.2},中位数:{}".format(m, dev(n, m), median(n)))
映射是一种键(索引)和值(数据)的对应
字典是映射的体现,通过键获得值
type(x) # 返回变量类型
# 创建字典:{:}
dic = {'中国':'北京', '美国':'华盛顿', '法国':'巴黎'}
dic['中国'] # 北京
# 操作函数
dic[k] = value # 键k不在存在则添加键值对,存在则修改对应的值
del dic[k] # 删除键k及对应的值
k in dic # 判断键k是否在dic中
dic.keys() # 返回所有键
dic.values() # 返回所有值
dic.items() # 返回键值对
print(dic.get('日本', '无')) # 键k存在返回对应值,否者返回参数'无'
print(dic.pop('中国', '无')) # 北京,{'美国': '华盛顿', '法国': '巴黎'}
print(dic.popitem()) # 随机删除一个键值对,('法国', '巴黎'),{'中国': '北京', '美国': '华盛顿'}
dic.clear() # 删除所有键值对
len(dic) # 键值对个数
中文分词第三方库,提供三种分词模式(精确模式,全模式,搜索引擎模式)
安装(cmd命令行):pip install jieba
import jieba
s = "好好学习,天天向上"
print(jieba.lcut(s)) # 精准模式,['好好学习', ',', '天天向上']
print(jieba.lcut(s, cut_all=True)) # 全模式,['好好', '好好学', '好好学习', '好学', '学习', ',', '天天', '天天向上', '向上']
print(jieba.lcut_for_search(s)) # 搜索引擎模式,['好好', '好学', '学习', '好好学', '好好学习', ',', '天天', '向上', '天天向上']
sort函数没有返回值,会改变原元素的值,局限于list
sorted函数有返回值,不会改变原元素的值,不局限于list
key接受的是函数对象(自定义函数或匿名函数lambda),函数只能有一个参数
key=lambda 元素: 元素[字段索引]
元素字母可以随意修改,按照[]里面的维度进行排序,例:[0]按照第一维排序,[1]按照第二维排序
reverse=True降序,reverse=False升序(默认升序)
# sort函数:局限于list
a = [-5, 4, -2, 3, -1]
def f(x):
return abs(x)
a.sort(key=f) # 按绝对值正序,[-1, -2, 3, 4, -5]
b = ["hello", "good", "python"]
b.sort(key=lambda x: len(x), reverse=True) # 按单词长度倒叙,['python', 'hello', 'good']
c = [("a", 3), ("b", 1), ("d", 2)]
c.sort(key=lambda x: x[1]) # 按元组里面第二个数排序,[('b', 1), ('d', 2), ('a', 3)]
# sorted函数:不局限于list
a = [2, 5, 3, 4, 1]
print(sorted(a)) # [1, 2, 3, 4, 5]
print(sorted(a, reverse=True)) # [5, 4, 3, 2, 1]
b = "python"
print(sorted(b)) # ['h', 'n', 'o', 'p', 't', 'y']
c = (2, 5, 3, 4, 1)
print(sorted(c)) # [1, 2, 3, 4, 5]
f = {"a": 3, "b": 1, "c": 2}
print(sorted(f.items(), key=lambda x: x[1])) # [('b', 1), ('c', 2), ('a', 3)]
# 对比输出
dic = {'a': 2, 'b': 3, 'c': 1}
ls = list(dic.items()) # [('a', 2), ('b', 3), ('c', 1)]
ls.sort(key=lambda x: x[0], reverse=True)
print(sorted(ls, key=lambda x: x[0], reverse=True)) # [('c', 1), ('b', 3), ('a', 2)]
ls.sort(key=lambda x: x[1])
print(sorted(ls, key=lambda x: x[1])) # [('c', 1), ('a', 2), ('b', 3)]
def getText():
txt = open("Files/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))
import jieba
txt = open("Files/三国演义.txt", "r", encoding='utf-8').read()
excludes = {"将军", "却说", "二人", "不可", "荆州", "不能", "如此"}
words = jieba.lcut(txt)
counts = {}
for word in words:
if len(word) == 1:
continue
elif word == "诸葛亮" or word == "孔明曰":
rword = "孔明"
elif word == "关公" or word == "云长":
rword = "关羽"
elif word == "玄德" or word == "玄德曰":
rword = "刘备"
elif word == "孟德" or word == "丞相":
rword = "曹操"
else:
rword = word
counts[rword] = counts.get(rword, 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(10):
word, count = items[i]
print("{0:<10}{1:>5}".format(word, count))
文件是数据存储的一种形式
文件的展示形态:文本文件和二进制文件
tf = open('f.txt', 'rt') # 文本形式打开
tf = open('f.txt', 'rb') # 二进制形式打开
print(tf.readline())
tf.close()
f = open('f.txt') # 默认文本只读
f = open('f.txt', 'rt') # 文本只读
f = open('f.txt', 'w') # 文本覆盖写
f = open('f.txt', 'x') # 文本创建写
f = open('f.txt', 'a+') # 文本追加写+读
f = open('f.txt', 'b') # 二进制只读
f = open('f.txt', 'wb') # 二进制覆盖写
f.close() # 文件关闭
s = f.read(2) # 读入2长度,默认全读
s = f.readall() # 读入整个文件内容
s = f.readline(2) # 读入前2行,默认读一行
s = f.readlines(2) # 读入前2行,默认读所有行(列表返回每一行)
f.write('中国是一个伟大的国家!')
ls = ['中国', '法国', '美国']
f.writelines(ls)
f.seek(0) # 0-回到文件开头,1-当前位置,2-文件结尾
import turtle as t
t.title('自动轨迹绘制')
t.setup(800, 600, 0, 0)
t.pencolor('red')
t.pensize(5)
# 读取数据
datals = []
f = open('Files/data.txt')
for line in f:
line = line.replace('\n', '')
datals.append(list(map(eval, line.split(','))))
f.close()
# 自动绘制
for i in range(len(datals)):
t.pencolor(datals[i][3], datals[i][4], datals[i][5])
t.fd(datals[i][0])
if datals[i][1]:
t.right(datals[i][2])
else:
t.left(datals[i][2])
安装(cmd命令行):pip install wordcloud
import wordcloud
w = wordcloud.WordCloud() # 设置词云的属性
w.generate('文本') # 载入文本
w.to_file('图像.png') # 输出图像文件
w = wordcloud.WordCloud(width=600) # 宽度,默认400
w = wordcloud.WordCloud(height=400) # 高度,默认200
w = wordcloud.WordCloud(min_font_size=10) # 最小字号,默认4
w = wordcloud.WordCloud(max_font_size=20) # 最大字号
w = wordcloud.WordCloud(font_step=2) # 步进间隔,默认1
w = wordcloud.WordCloud(font_path='msyh.ttc') # 字体微软雅黑
w = wordcloud.WordCloud(max_words=20) # 最大单词数量,默认200
w = wordcloud.WordCloud(stopwords={'Python'}) # 排除词云列表
w = wordcloud.WordCloud(background_color='white') # 背景颜色
# 指定词云形状
import imageio
photo = imageio.imread('图像.png')
w = wordcloud.WordCloud(mask=photo)
# 实例一
import wordcloud
txt = "life is short, you need python"
w = wordcloud.WordCloud(background_color='white')
w.generate(txt)
w.to_file('pywcloud.png')
# 实例二
import wordcloud, jieba
txt = '程序设计语言使计算机能够理解和识别用户操作意图的一种交互体系, \
他按照特定规则组织计算机指令,使计算机能够自动进行各种运算处理。'
w = wordcloud.WordCloud(width=1000, height= 700, font_path='msyh.ttc')
w.generate(''.join(jieba.lcut(txt)))
w.to_file('pywcloud.png')
# 新时代中国特色社会主义
import wordcloud, jieba
f = open('Files/新时代中国特色社会主义.txt', 'r', encoding='utf-8')
t = f.read()
f.close()
ls = jieba.lcut(t)
txt = ''.join(ls)
w = wordcloud.WordCloud(width=1000, height=700, background_color='white', font_path='msyh.ttc', max_words=20)
w.generate(txt)
w.to_file('image.png')
# 关于实施乡村振兴战略的意见
import wordcloud, jieba, imageio
f = open('Files/关于实施乡村振兴战略的意见.txt', 'r', encoding='utf-8')
t = f.read()
f.close()
ls = jieba.lcut(t)
txt = ''.join(ls)
photo = imageio.imread('Files/五角星.png')
w = wordcloud.WordCloud(width=1000, height=700, background_color='white', font_path='msyh.ttc', mask=photo)
w.generate(txt)
w.to_file('image.png')