小明使用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
if count
>= :
return
True
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)
答案: 【1】0
【1】fw * fh* 0.64【2】da[bzd[i]]【3】x = xs+ total_width * col