1. 某数据压缩方法描述如下:

①原始数据中,某数不为0且相邻无重复,压缩数据用该数据表示;②原始数据中,某数为0且相邻无重复,压缩数据用两个数表示,第1个为0,第2个为0;③原始数据中,某数据相邻有重复,压缩数据用3个数表示:第1个为0,第2个为重复数的个数,第3个为该数本身。

根据上述压缩方法,对应的解压缩方法示例如图所示。

小明学习了Python的PIL、matplotlib和numpy等模块知识后,现有图像文件“杭州.bmp”,该文件的颜色模式为RGB,将该图像文件的每个像素点转换成灰度值(值为整数)后,使用上述压缩方法进行压缩并保存为文本文件。颜色RGB值转灰度值的公式如下:

灰度值=0.299×红色颜色分量+0.587×绿色颜色分量+0.114×蓝色颜色分量

(1) 如果压缩数据为“23,0,21,66,0,0,77,0,5,0”,则解压缩数据的个数是
(2) 实现上述功能的 Python 程序如下。请在划线处填入合适代码。

from PIL import Image

import numpy as np

import matplotlib.pyplot as plt

img = np.array(Image.open("杭州.bmp"))

row,cols,rgb =img.shape

s= []

for i in range(row) :

for j in range(cols) :

r,g,b = img[i,j]

hdz =

s.append(hdz)

ss = [] ;j = 0

while j<len(s)-1 :

if s[j] !=s[j+1] :

if s[j] !=0:

ss.append(s[j])

else:

ss.extend( )#extend 函数用于在列表末尾一次性追加另一个序列中的多个值

j+=1

else:

c = s[j]

for k in range(j+1,len(s)) :

if c!=s[k]:

break

else:

ss.extend([0,k-j,s[j]])

j=k

if j!=len(s) :

ss.append(s[j])

f = open(" 杭州 255.txt","w+")

f.write(",".join(map(str,ss)))

f.close()

【考点】
分支结构语句及程序实现; 循环结构语句及程序实现;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难
能力提升
真题演练
换一批
1. 大部分社交软件都有好友推荐的功能,当用户 A 和用户 B 的共同好友数量超过阀值 p 时,由系 统向用户 A 推荐用户 B。其中共同好友判定方法为:用户 A 和用户 B 不是好友,用户 C 分别是 用户 A 和用户 B 的好友, 则共同好友数量加 1。编写 Python 程序,实现好友推荐功能。运行程 序, 首先从文件中读取用户 id 及好友列表后, 处理后显示用户之间的关系;再输入推荐目标用 户 id 和阈值 p;最后显示向目标用户推荐的好友列表。

图 1 数据文件

图 2 运行结果

(1) 根据如图所示数据,若输入推荐目标用户 id 为“1”,输入阈值为“4”,则推荐好友为:
(2) 主程序,读取"数据.txt"文件,进行处理后显示用户关系二维表,再输入推荐目标用户id和阈值p,显示向目标用户推荐的好友列表,请在划线处填入合适的代码。

n = 10

sj = [] ;zj = [];tj= []

#按行读取"数据.txt"文件,每次读一行文字存入字符串变量 line 中

f=open("数据.txt")

line=f.readline()    # 读取标题行

line=f.readline()

while line:

sj.append(line.split(" "))  # 将字符串以" "为间隔分割成多个字符串组成的列表 line=f.readline()   #读取下一行

zj = zhengli(sj)

# 显示各用户之间关系二维表,代码略

# 输入推荐目标用户 id 和阈值 p,显示向目标用户推荐的好友列表

id = int(input("请输入推荐目标用户 id:"))

p = int(input("请输入阈值 p:"))

       #调用函数进行好友推荐

if len(tj) != 0:

t = 0

print("推荐好友为:",end = " ")

while t < len(tj):

print(tj[t],end = " ")

t = t + 1

else:

print("没有推荐好友")

(3) 编写整理数据函数 zhengli,根据好友列表, 生产关系二维表,请在划线处填入合适的代码。 def zhengli(sj):

r = [[0 for i in range(n)]for j in range(n)]

for i in range(n):

for j in sj [i][1:]:

r[i][int(j)-1] = 1

 # 对角位置同样设置为 1

return r

(4) 编写函数 fenxi,根据输入推荐目标用户 id 和阈值 p,显示向目标用户推荐的好友列表,请在划线处填入合适的代码。

def fenxi(id,p):

res =[]

for i in range(n):

c = 0

for j in range(n):

if i != id-1 and j != id-1 and i != j:

if  :

c += 1

if  :

res.append(i+1)

return res

综合题 困难
2. 小明使用Python编写了某答题卡中单项选择题的判分程序,该单选题每题2分。扫描答题卡获取选项填涂信息,输入标准答案,程序自动判断并输出分数。具体方法为:

一个选项是否被填涂,可以从判断一个像素的颜色开始,像素的填涂情况是通过RGB的值来判断 ,灰度值低于132的表示该点被填涂;一个信息点64%的像素被填涂,则认为该区域已填涂,返回值为“1”。区域未填涂时返回值为“0”;各选项的编码为:A→“1000”,B→“0100”,C→“0010”,D→“0001”;输入标准答案,程序进行对比并返回结果。答题卡相关信息如下:

(1) 某题的标准答案为“C”,该题填涂情况为“0100”,则分数为分。
(2) 实现上述功能的程序如下,请在划线处填入合适的代码。

from PIL import Image

#输入起始点坐标(xs,ys),信息点宽度高度(fw, fh),间隔宽度高度(sw, sh),代码略

num = 5               # 判分个数

def bw_judge(R, G, B):   # bw_judge用于判断一个像素的填涂情况,代码略

def fill_judge(x, y):      # fill_judge用于判断信息点的填涂情况

    count = 0

    for i in range(x, x + fw + 1):

        for j in range(y, y + fh + 1):

            R, G, B = pixels[i, j]

            if bw_judge(R, G, B) = = True:

                count = count + 1

    return

total_width = fw+ sw

total_height = fh + sh

image = Image.open("t2.bmp")

pixels = image.load()

number = ""

bz=[""]*num

df=0

bzd=input('请输入标准答案:')

da={"A":"1000","B":"0100","C":"0010","D":"0001"}

for i in range(len(bzd)):

    bz[i]=

for row in range(num):                       #分数判定

    for col in range(4):

        y = ys + total_height * row

        if fill_judge(x, y) == True :

            number = number + '1'

        else:                           

            number = number + '0'

    if number = = bz[row]:

 df+=2

    number=""

print("得分为:",df)

综合题 困难