第3章 算法的程序实现
浙教版 信息技术(高中)
必修1 数据与计算
3.3 简单算法及其程序实现
学习目标
1
2
3
解析算法及其程序实现。
枚举算法及其程序实现。
算法程序实现的综合应用。
1
2
重点难点
重点:算法程序实现的综合应用。
难点:算法程序实现的综合应用。
课堂导入
算法设计完成后,就可以用程序设计语言来描述算法,本节介绍如何使用python程序设计语言来描述一些简单算法。
3.3.1解析算法及其程序实现
答题卡填涂识别
(1)抽象与建模
灰度值=0.299x红色颜色分量+0.587x绿色颜色分量+0.114x蓝色颜色分量
(2)设计算法
①给定颜色初值:输入某像素在RGB颜色模式下的各颜色分量。
②转换颜色模式:将彩色(RGB颜色模式)值转化成灰度值。
③判定黑、白颜色:若灰度值小于132, 则判定为黑色;否则判定为白色。
(3)编写程序
3.3.2枚举算法及其程序实现
例如,求解某整数x的所有因子(不包含x本身)。
判定某信息点是否被填涂,还需要对该信息点区域中的所有像素进行判断。
(1)抽象与建模
(2)设计算法
(3)编写程序
①逐一列举某信息点中的各个像素。
②如果当前枚举的像素是黑色,那么黑色像素的数量加1。
③输出该信息点中黑色像素总数。
count=Σsi ,si={
n
i=1
0 (Gray_scale [i] ≥132
1 (Gray_scale [i] <132)
对300个像素的颜色数据逐一进行列举并判断。
fname=input ("请输入文件名称:")
f=open (fname, "r+")
count=0
line=f.readline0( )
while line:
line=line.split()
R, G, B=map (int,line)
if 0. 299*R+0. 587*G+0. 144*B <132:
count=count+1
line=f.readline()
if count> =300*0. 64:
f.write ("\n已填涂!")
else:
f.write ("\n未填涂!”)
f.close()
拓展链接:
Python的文件读写操作
读写文件是计算机中常见的输入输出操作,读写文件时会请求操作系统打开一个文件对象,然后通过操作系统提供的接口从这个文件对象中读取数据(读文件), 或者把数据写入这个文件对象(写文件)。
Python内置了读写文件的函数。读文件时,可以使用内置的open0函数打开由参数指定的文件对象,并通过参数指定打开方式。如:
>> > f=open (test.txr',r)
上述命令的作用是以读文件模式(参数丫)打开文件test.txt, 如果文件打开成功,可以用read () 方法将文件中的全部内容读取到内存。如果文件test.txt内容为“Hello,world! ”, 那么命令的执行结果为:
>> > f.readO
>> > 'Hello,world! '
由于调用read( )会一次性读取文件的全部内容,为避免读取文件过大,可采用多次调用read (size) 方法,每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,并按行返回list.因此,可根据实际需要灵活调用read()方法。如果文件很小,read()一次性读取比较方便;如果不能确定文件大小,反复调用read (size) 比较安全;如果是配置文件,调用readlines() 最方便。如:
for line in f.readlines () :
print (line.strip0)
文件使用完毕后必须关闭。关闭文件的方法如下:
>> > f.close0
调用open()函数写文件时,用参数'w'表示写文本文件模式;'r+'模式则表示在打开一个文本文件时同时允许读和写。例如,将“Hello,world! ”写入test.txt, 可使用下列命令:
>> > f=open ('test.txt', 'w)
>> > f.write (Hello,world! ')
>> > f.close()
问题与讨论:
请结合枚举算法的学习经历,谈谈枚举算法的一般程序结构特点。
3.3.3 算法程序实现的综合应用
创建函数bw_judge,能够根据彩色像素的RGB三种颜色分量值,通过计算进而识别该像素的颜色情况。
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
from PIL import Image
im=Image.open ("RGB.bmp")
pix=im.load0
width=im.size [0]
height=im.size [1]
count=0
for x in range (width) :
for y in range (height) :
R, G, B=pix [x,y]
if bw_judge (R, G, B) =="黑色":
count=count+1
if count> =width*height*0. 64:
print ("已填涂!”)
else:
print ("未填涂!”)
#size中有两个参数,第1个参数为图像宽度值
#第2个参数为图像高度值
#根据像素坐标获得该点的 RGB值
#bw_judge函数用于判断黑、白像素
问题与讨论:
分析本节中的准考证号填涂识别算法及其程序实现,你认为
在提高填涂识别的准确性及合理性等方面还可以做哪些完善?相
应的程序又如何实现?
实践与体验:
图像字符画
字符画是一种由字母、标点、汉字或其他字符组成的图画。复杂的字符画
通常利用占用不同数量像素的字符代替图像上不同明暗的点,用纯文字拼出该
图像所对应的黑白图,可以由程序制作而成。
谢 谢!
Thanks!
https://www.21cnjy.com/help/help_extract.php