1.  某平台新上架影片推荐度的计算方式为:由5位专业评审与5位大众评审给影片评分,评分区间为[1,10],将专业评审均分的60%与大众评审均分的40%求和后取整数部分,根据得分确定等级(分值与等级的关系如图a所示)。评委打分情况放在“dc.txt”文件中,如图b所示,其中“A”表示专业评审,“B”表示大众评审,“A1-5”表示第1位专业评审给出5分。

图 a

图 b

请回答下列问题:

(1) 若专业评审均分为 5,大众评审均分为 6,则该影片等级为(填数字)颗星。
(2) 实现上述功能的部分 Python 程序如下,请在划线处填入合适的代码。

f=open(" ",encoding="utf-8")

line=f.readline() #读取第一行,保存在字符串 line 中

pro,pub=0,0

while line:#当 line 非空

    x=

    t=int(line[3:])

    if x=="A":

        pro+=t

    elif x=="B":

       

        line=f.readline() # 继续读取一行

score=int(pro/5*0.6+pub/5*0.4)

grade=

print("推荐度为:","★"*grade)

【考点】
运算符、基本运算与表达式; 分支结构语句及程序实现; 循环结构语句及程序实现;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 普通
能力提升
真题演练
换一批
2. 为四则运算式“6+(8-2)*2÷3”转逆波兰表达“682-2*3÷+”设计算法,编程实现。

分析:在数学运算表达式中,运算符总是置于与之相关的两个运算对象之间,在计算结果时,要考虑括号、运算符号的优先性。为了程序实现的方便,波兰逻辑学家J.Lukasiewicz提出了另一种表示法,将运算符置于其运算对象之后,没有括号,不用考虑运算符号的优先性。这种表达式称为后缀表达式,又叫逆波兰表达式。

如表达式“682-2*3÷+”是四则运算式“6+(8-2)*2÷3”的逆波兰表达式。为了处理方便, 规定表达式中的数均为小于 10 的正整数, 运算符为+ - * ÷。

⑴抽象建模

设计两个栈bds、fh,栈bds用来存放表达式,栈fh用来暂时存放运算符。从左往右扫描四则运算式,遇到数字时,入栈bds;遇到运算符号时,根据运算符号的优先级设计进栈与出栈。

四则运算式“6+(8-2)*2÷3”转换规则的模拟过程如表1所示:

表 1

结合表1的操作过程,用栈bds和栈fh记录每个操作后的栈内情况(见下图),那么在操作2中栈fh里有内容为(请从栈底到栈顶顺序书写)。

⑵设计算法

基于问题的抽象与建模,解决该问题的主要算法描述如下:

从左往右遍历四则运算式s(设中间变量为ch):

1)当ch是数字,直接入栈bds;

2)当ch是运算符:

a.若ch为左括号时,直接入栈fh;

b.若ch为右括号时,则将栈fh元素弹出,压入栈bds,直到遇到左括号(左括号只弹出,不压入栈bds);

c.若ch为其它运算符时,如果运算符ch优先级大于栈fh中栈顶元素的优先级(或栈fh为空),直接入栈fh;否则,将栈fh元素依次弹出,并压入栈bds,直到运算符ch优先级大于栈fh中栈顶元素的优先级(或栈fh为空);

3)将栈bds中元素依次出栈,即为该四则运算s的后缀表达式。

⑶编写程序

实现上述功能的 Python 代码如下,请在划线处填入合适代码。

yxj = {"+":1,"-":1,"*":2,"÷":2} #运算规则的优先级

s = input("请输入四则运算式: ")

fh = [""]*100  #存储运算符

topfh = -1

bds = [""]*100 #存储表达式

top=-1

for ch in s:

if ch.isdigit():   #字符串只包含数字则返回 True 否则返回 False

top+=1

bds[top]=ch

elif ch == "(":

topfh +=1

fh[topfh]=ch

elif ch == ")":

while True:

tmp = fh[topfh]

topfh-=1

if tmp=="(":

top+=1

bds[top]=tmp

elif ch in yxj:

if topfh==-1 or fh[topfh]=="(":

topfh += 1

fh[topfh]=ch

elif :

topfh+=1

fh[topfh]=ch

else:

while fh[topfh]!="(" and topfh!=-1:

if yxj[fh[topfh]]>=yxj[ch]:

top+=1

bds[top]=fh[topfh]

topfh-=1

else:

break

topfh+=1

while topfh!=-1:

top+=1

bds[top]=fh[topfh]

topfh-=1

print("后缀表达式:","".join(bds[:top+1]))

综合题 普通
3. 某数据压缩方法描述如下:

①原始数据中,某数不为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()

综合题 困难