本文章原文地址:https://www.cnblogs.com/BobHuang/p/15621121.html,原文体验更佳
教材P68中IDLE显示Python版本为3.7.0,所以建议使用Python3.7系列。
第一章 数据与信息
1.1 感知数据
1.2 数据、信息与知识
1.3 数据采集与编码
1.4 数据管理与安全
1.5 数据与大数据
第二章 算法与问题解决
2.1 算法概念及描述
P46 停车场车位探测
flag = int(input("输入车位状态值:"))
if flag == 1:
print("绿色")
print("空车位")
else:
print("红色")
print("非空车位")
2.2 算法的控制结构
2.3 用算法解决问题的过程
第三章 算法的程序实现
3.1 用计算机编程解决问题的一般过程
P67 绘制正n边形
import turtle
n=int(input("请输入正多边形的边数n:"))
a= int(input("请输入边长a:"))
d=(n-2)*180/n
t=turtle.Pen()
for i in range(n): #重复执行n遍
t.forward (a) #向前绘制长度为a的线段
t.left(180-d) #向左旋转(180-d)度
3.2 Python语言程序设计
P68 计算4+13
>>> print(4+13)
17
P69 输出"Hello Python!"
>>> print("Hello"+" Python!")
Hello Python!
教材'Hello Python!'错了。打印时并不输出类型的'',运行"Hello"+" Python!"是有单引号的。
P69 两个数求和
a=int(input("请输入正整数a:"))
b=int(input("请输入正整数b:"))
c=a+b
print(c)
P71 in成员运算符示例
>>> "w" in "rw"
True
>>> "x" in "rw"
False
P72 定义变量
>>> degress_cel=26.0
>>> degress_cel
26.0
>>> degress_cel="26.0"
>>> degress_cel
'26.0'
P72 赋值语句
>>> number=0
>>> number=number+1
>>> print(number)
1
P72 定义列表
>>> info=["BH60018","苹果",50]
P73 使用索引访问元素
>>> info=["BH60018","苹果",50]
>>> info[2]
50
>>> s="Hello"
>>> s[1]
'e'
P73 切片
>>> info[0:2]
['BH60018', '苹果']
>>> s[1:4]
'ell'
P74 字典
>>> dic={"铅笔":71,"钢笔":59,"橡皮":98,"尺子":92}
>>> print(dic["铅笔"])
71
P74 交换a和b
a=int(input("请输入整数a的值:"))
b=int(input("请输入整数b的值:"))
c=a #语句1
a=b #语句2
b=c #语句3
print("a=",a)
print("b=",b)
P77 区间测速
s=25
t=int(input("请输入用时(秒):"))
v=s*3600/t
if v<=100:
print("正常")
else:
print("超速")
P78 问题与讨论
分析下面两段代码,找出两者的区别。
代码一
s=25
t=int(input("请输入用时(秒):"))
v=s*3600/t
if v<=100:
print("正常")
else:
print("平均车速",round(v,1))
print("超速")
代码二
s=25
t=int(input("请输入用时(秒):"))
v=s*3600/t
if v<=100:
print("正常")
else:
print("平均车速",round(v,1))
print("超速")
P80 区间测速加强版
s=25
t=int(input("请输入用时(秒):"))
v=s*3600/t
print("平均车速", round(v,1))
if v<=100:
print("正常")
elif v<120:
print("超过规定时速且不足20%")
elif v<150:
print("超过规定时速20%以上且不足50%")
elif v<170:
print("超过规定时速50%以上且不足70%")
else:
print("超过规定时速70%以上")
P80 for序列遍历
hobby=["篮球","羽毛球","看书","旅游","音乐"]
for x in hobby:
print(x)
P81 for range列表遍历
for num in range(0, 10, 1):
print(num, end=' ')
P82 热量消耗
a=[95,100,122,180,245,221]
s=0
for j in a:
s=s+j
print("总消耗热量为:",s)
P83 猜数游戏
number=23
running= False
while not running:
guess=int(input("请输入猜测的数:"))
if guess==number:
print("正确")
running=True
elif guess<number:
print("偏小")
else:
print("偏大")
P84 自定义三角形面积函数
def Area(a, b, c):
p=(a+b+c)/2
s=(p*(p-a)*(p-b)*(p-c))**0.5
return s
P85 模块的导入和应用
方法1
>>> import math
>>> math.sqrt(9)
3.0
方法2
>>> from math import sqrt
>>> sqrt(9)
3.0
P86 计算圆的面积
import math
r=float(input("请输入圆的半径r:"))
pi=math.pi
s=pi*pow(r, 2)
print("圆面积是:",str(s))
P86 随机出场顺序
import random
cla=["(2)班","(3)班","(5)班","(8)班","(9)班"]
random.shuffle(cla)
for x in cla:
print(x)
P86 使用Image模块操作图像
from PIL import Image
im= Image.open("school.jpg") #打开school.jpg图像文件
print(im.format) #获取图像文件格式
print(im.size) #获取图像尺寸大小(以像素为单位表示图像的宽度和高度)
print(im.mode) #获取图像的颜色模式
im.rotate(45).show() #将图像旋转45°后显示
* P87 实践与体验 编程实现图像的简单处理
from PIL import Image
import numpy as np
import matplotlib. pyplot as plt
img=np.array(Image.open('lena.jpg').convert('L'))
rows, cols=img.shape #图像尺寸分别赋值
for i in range(rows): #依次取每个像素的坐标
for j in range(cols):
if(img[i,j]>128): #像素值大于128,赋值1,否则为0
img[i,j]=1
else:
img[i,j]=0
plt.figure("lena") #指定当前绘图对象
plt.imshow(img,cmap='gray') #显示灰度图像
plt.axis('off') #关闭图像坐标
plt.show() #弹出包含了图片的窗口
P88 思考与练习1 表达式或程序语句的值
(1)123%100
(2)len("Hello Leo!")
(3)abs(-12)
(4)data=[172,9,165,29,156,21]
max(data)
P89 思考与练习6 turtle画图
import turtle
t=turtle.Pen()
turtle.bgcolor("white")
colors=["red","green","blue","yellow"]
for x in range(100):
t.pencolor(colors[x%4])
t.circle(x)
t.left(91)
3.3 简单算法及其程序实现
P91 根据灰度值判断黑白
R=43
G=10
B=241
Gray_scale=0.299*R+0.587*G+0.114*B
if Gray_scale<132:
print("黑色")
else:
print("白色")
P91 枚举求整数的因子
x=int(input("请输入整数x:"))
i=1
while i<=x-1:
if x%i==0:
print(i)
i=i+1
P92 给定多个像素点判断颜色
count=0
Gray_scale=47,178,146,185,116
for i in range(0,len(Gray_scale)):
if Gray_scale[i]<132:
print("第"+str(i+1)+"个像素为黑色;")
count=count+1
print("黑色像素总共有:"+str(count)+"个。")
P93 读入颜色数据判断是否填涂
fname= input("请输入文件名称:")
f= open(fname, "r+") #以读写的方式打开文件
count=0
line= f.readline() #从文件中读取一行
while line: #当line非空(从文件读取到了数据
line=line.split() #把空白字符去除,变成包含三个str的list
R,G,B= map(int, line) #把line中三个str转化成int并赋值给R,G,B
if 0.299*R+0.587*G+0.144*B<132:
count= count +1
line=f.readline() #继续读取一行
print(count)
if count >= 300*0.64:
print("已填涂!")
else:
print("未填涂!")
f.close()
P93 拓展链接 文件读写
>>> f = open('test.txt','r')
>>> f.read()
'Hello, world!'
调用open()函数打开由参数指定的文件对象,参数'r'表示读文本文件模式,参数'w'表示写文本文件模式,'r+'模式则表示在打开一个文本文件同时允许读和写。调用read()函数会一次性读取文件的全部内容
for line in f.readlines():
print(line.strip()) #strip()把末尾的'\n'删掉
文件使用完毕后必须关闭,操作系统才会把内存中的待写入的数据全部写入磁盘
>>> f.close()
将"Hello, world!"写入test.txt
>>> f = open('test.txt','w')
>>> f.write('Hello, world!')
>>> f.close()
P94 自定义判断黑白函数
def bw_judge(R,G,B):
Gray_scale=0.299*R+0.587*G+0.114*B
if Gray_scale<132:
color="黑色"
else:
color="白色"
return color
P95 读取图像判断是否填涂
from PIL import Image
im = Image.open("RGB.bmp")
pix = im.load()
width = im.size[0] # size中有两个参数,第1个参数为图像宽度值
height = im.size[1] # 第2个参数为图像高度值
count=0
for x in range(width):
for y in range(height):
R,G,B = pix[x, y] # 根据像素坐标获得该点的 RGB 值
if bw_judge(R,G,B)=="黑色": # bw_judge函数用于判断黑、白像素
count=count+1
if count>=width*height*0.64:
print("已填涂!")
else:
print("未填涂!")
P97 准考证填涂识别
def bw_judge(R, G, B): # bw_judge用于判断一个像素的填涂情况
Gray_scale = 0.299 * R + 0.587 * G + 0.114 * B
return Gray_scale < 132
def fill_judge(x, y): # fill_judge用于判断信息点的填涂情况
count = 0
for i in range(x, x + fill_width + 1):
for j in range(y, y + fill_height + 1):
R, G, B = pixels[i, j]
if bw_judge(R, G, B) == True:
count = count + 1
if count >= fill_width * fill_height * 0.64:
return True
from PIL import Image
x_start = 12 # 起始点坐标
y_start = 92
fill_width = 24 # 信息点宽度
fill_height = 12 # 信息点高度
space_width = 16 # 间隔宽度
space_height = 15 # 间隔高度
num_length = 9 # 准考证号长度
total_width = fill_width + space_width
total_height = fill_height + space_height
image = Image.open("fill.bmp")
pixels = image.load()
number = ""
for col in range(num_length): # x从左至右,y从上至下对填涂区进行检测
for row in range(10):
x = x_start + total_width * col
y = y_start + total_height * row
if fill_judge(x, y) == True:
number = number + str(row)
break
else: # 10个信息点检测完毕后未发现有填涂
number = number + '#'
print(number)
* P99 实践与体验 图像字符画
from PIL import Image
serarr=['@','#','$','%','&','?','*','o','/','{','[','(','|','!','^','~','-','_',':',';',',','.','`',' ']
count=len(serarr)
def toText(image_file):
asd ='' # 储存字符串
for h in range(0, image_file.size[1]): # 垂直方向
for w in range(0, image_file.size[0]): # 水平方向
r,g,b =image_file.getpixel((w,h))
gray =int(r* 0.299+g* 0.587+b* 0.114)
asd=asd+serarr[int(gray/(255/(count-1)))]
asd=asd+'\r\n'
return asd
image_file = Image.open("boy.jpg") # 打开图片
image_file=image_file.resize((int(image_file.size[0]*0.9), int(image_file.size[1]*0.5))) #调整图片大小
tmp=open('boy.txt','a')
tmp.write(toText(image_file))
tmp.close()
第四章 数据处理与应用
4.1 常用表格数据的处理
4.2 大数据处理
P114 统计文件filenmae中各单词出现的频率
wordcount={}
for word in open(filename,'r').read():
wordcount[word]+=1
P120 例1 创建1个seris结构类型的对象s1,存储3名同学的身高值
import pandas as pd
s1=pd.Series([166,178,180])
print(s1)
#创建Series对象时指定索引
s2=pd.Series([166,178,180],index=["s01","s02","s03"])
print(s2)
P121 例2 查看例1中s1对象的index、values属性值
for i in s1.index:
print(i)
for i in s1.values:
print(i)
for i in s1:
print(i)
P121 例3 使用相同长度的列表字典构建一个DataFrame对象df1,存储3名同学的姓名、性别、图书借阅次数数据。
import pandas as pd
data={"姓名":["王静怡","张佳妮","李辰武"],"性别":["女","女","男"],"借阅次数":[28,56,37]}
df1=pd.DataFrame(data,columns=["姓名","性别","借阅次数"])
print(df1)
P121 例4 读取Excel文件“test.xlsx”中的数据,创建DataFrame对象df。
import pandas as pd
df=pd.read_excel("test.xlsx")
print(df)
P122 例5 查看df1对象的索引、列标题、值,并将行列转置。
for i in df1.index:
print(i)
for i in df1.columns:
print(i)
for i in df1.values:
print(i)
print(df1.T)
P122 例6 分别检索df1对象中“姓名”“借阅次数”列数据,并修改“借阅次数”列数据
print(df1.姓名)
print(df1["借阅次数"])
df1.借阅次数=[30,52,68]
print(df1)
P123 例7 对df对象中的数据进行以下编辑:在最后一行追星一行数据;删除“规格”列数据;删除第一行数据。
#添加一行数据
df_add=df.append({"地区":"石家庄市","规格":"红富士 一级","单位":"元/500克","价格":4.00,"采价点":"集市3","采集时间":"11月中旬"},ignore_index=True)
df_delc=df.drop("规格",axis=1) #删除"规格"列数据
df_delr=df.drop(0) #删除第1行数据
P124 例8 将df对象中的数据按“地区”分组,并计算分组后各组数据的平均值。
g=df.groupby("地区",as_index=False)
print(g.mean()) #计算每组价格数据的平均值
P124 例9 对df对象中的数据,按“价格”值降序排序。
df_sort=df.sort_values("价格",ascending=False) #按价格值降序排序
print(df_sort)
P125 例10 绘制正弦曲线图。
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(0,10,1000)
y1=np.sin(x)
y2=np.sin(x**2)
plt.figure(figsize=(8,4)) #创建图表对象
plt.title("sin(x) and sin(x**2)") #设置图表标题文字
plt.plot(x,y1,label="sin(x)",color="r",linewidth=2) #绘制线形图
plt.scatter(x, y2,label="sin(x**2)") #绘制散点图
plt.ylim(-1.5,1.5) #设置y坐标轴取值范围
plt.xlim(0,10) #设置x坐标轴取值范围
plt.legend() #显示图例
plt.show()
P126 通过统计某地姓名数据,分析当地姓氏的构成情况。
import pandas as pd
import matplotlib.pyplot as plt
import codecs #处理中文utf-8编码
from matplotlib.font_manager import FontProperties #显示中文字体
file = codecs.open('names.csv',"r","utf-8") #打开文件
# 定义复姓 list
fx=['欧阳','太史','端木','上官','司马','东方','独孤','南宫','万俟','闻人','夏侯','诸葛','尉迟','公羊',
'赫连','澹台','皇甫','宗政','濮阳','公冶','太叔','申屠','公孙','慕容','仲孙','钟离','长孙','宇文',
'司徒','鲜于','司空','闾丘','子车','亓官','司寇','巫马','公西','颛孙','壤驷','公良','漆雕','乐正',
'宰父','谷梁','拓跋','夹谷','轩辕','令狐','段干','百里','呼延','东郭','南门','羊舌','微生','公户',
'公玉','公仪','梁丘','公仲','公上','公门','公山','公坚','左丘','公伯','西门','公祖','第五','公乘'
]
xing = []
j=0
for line in file:
if line[0:2] in fx: #取复姓
xing.append(line[0:2])
else:
xing.append(line[0:1]) #取单姓
j=j+1
data={'xing':xing,"renshu":0}
df=pd.DataFrame(data) #构造DataFrame数据结构
s= df.groupby('xing').count() #按照"xing"分组计数
s=s.sort_values('renshu',ascending=False) #按照"renshu"降序排列
ax=s[0:20].plot(kind='bar',rot=0) #对前20绘图
#显示中文标签
font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14)
for label in ax.get_xticklabels():
label.set_fontproperties(font)
plt.show() #显示图形
print(s)
本代码出现了codecs模块,是为了处理中文编码的。如果报错把codecs.py复制到当前文件夹或者添加Pythob Lib文件夹的环境变量。
* P132 实践与体验 中文分词与标签云
import os
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
from wordcloud import WordCloud,STOPWORDS
d = os.path.dirname(__file__) #d取当前文件路径
pic="alice_mask.png" #pic存放图片名称
pic_mask = np.array(Image.open(os.path.join(d, pic)))
wc = WordCloud(background_color="white", max_words=6000, mask=pic_mask, stopwords=STOPWORDS,font_path="fonts/simhei.ttf")
wc.fit_words(wf) #生成标签云,wf存放词语及词频
plt.imshow(wc) #显示图片
P138 思考与练习 使用Python中文分词模块jieba,体验中文分词
import jieba #引用jieba分词模块
text = open('file_name.txt','r').read() #读入文本文件
seg_list = jieba.cut(str_delete,cut_all=True) #全模式分词
print("全模式分词:"," ".join(seg_list))
seg_list = jieba.cut(text) #默认模式分词
print("全模式分词:"," ".join(seg_list))
4.3 大数据典型应用
* P142 实践与体验 出租车轨迹可视化分析
import matplotlib.pyplot as plt
def plot_file (file): #绘制每个文件的GPS坐标轨迹
i=0
jd=[] #经度
wd= [] #纬度
for line in open (file) :
i=i+1 #切分行数据
splitline=line.split(',') #取轨迹坐标
x=float(splitline[4])
y=float(splitline[5])
jd.append(x)
wd.append(y)
plt.plot(jd,wd) #画点
filename='xyz.txt'
plot_file(filename)
plt.show()