组卷网 > 高中信息技术综合库 > 数据与计算 > 算法与程序实现 > 算法 > 典型算法
题型:操作题 难度:0.4 引用次数:78 题号:15973407
有一种 ASCII 字符加密的算法,其加密过程如下:
①将明码中每个字符的 ASCII 码转为八位二进制,依次连接
②位置加密:每 4 位一组进行移位,第 1 组左移一位,并将原第一位数码移至最后(如 0110 转化为1100),第 2 组右移一位,并将原最后一位数码移至头部(如 0001 转化为 1000),第 3 组左移...以此类推,实现位置加密,并将每组移动后的结果转换成十进制,按顺序连接
③值加密:随机产生一个密钥 key,在符号列表['+','*','//','%']中取出对应运算符号,将②中的十进制结果分别与密钥 key 进行运算,顺次连接求得该字符的密文,(如 key 为 3,取得运算符'%',则字符'a'的高位密文为 12%3=0,低位密文为 8%3=2,顺次连接后得'a'的密文为'02' ④将每个字符的密文顺序连接,得到最终字符串密文。
用 Python 编写的程序运行结果如图 15 所示,请回答下列问题:

图 15

(1)当 key=3 时,输入要加密的明文:"aA" 则输出的密文为:____________
(2)请在划线处,填入适当的语句或语句表达式
import random
def jzzh(x):

s=''

for i in range(8):

r=x%2

             s=_______

             x=x//2

       return s     

def jisuan(x): # 进 行 key 运 算

       m=0

       if fh[key]=='+':

             m=x+key

       elif fh[key]=='*':

             m=x*key

       elif fh[key]=='//':

             m=x//key

       elif fh[key]=='%':

             m=x%key

       return m

def yidong(x):            

       jg=''

       n=len(x)//4

       for i in range(n):

             if i%2==0:                 

                    f=___________

             else:                           

                    f=x[i*4+3]+x[i*4:i*4+3]

             s=0

             for j in f: #将 4 位二进制转成十进制

                    s=s*2+int(j)

             jg+=________       

       return jg             

mingw=input('请输入要加密的明文:')
fh=['+','*','//','%']
miw='' global key
key=random.randint(0,3)
for a in mingw:

a=ord(a)

L=jzzh(a)

miw+=L

jieguo=yidong(miw)
print("产生的随机密钥为:",key,"\n 密文为:",jieguo)
【知识点】 典型算法

相似题推荐

操作题 | 较难 (0.4)
名校
【推荐1】扫描算法是一种电梯的调度算法,电梯在最底层(1楼)和最顶层(20楼)之间连续往返扫描并运行,在运行过程中优先处理与当前电梯运行方向相同的请求,比如:当前电梯在3楼,方向为向上,此时有3个人请求使用电梯:7楼去16楼、2楼去9楼、6楼去1楼,则电梯先向上运行,依次在7楼和16楼停靠;然后再向下运行,依次在6楼和1楼停靠,最后再向上运行,依次在2楼和9楼停靠。小明编写Python程序实现这个调度算法,运行界面如图所示,请回答下列问题。
(1)Python程序如下,请在划线处填入合适的代码。

def scan(now,d):#scan函数的功能:从当前楼层开始,按当前运行方向扫描一趟

i=0

while i<=len(ask)-1:

if ask[i][2]==d and ________:

stop[ask[i][0]]=1

stop[ask[i][1]]=1

ask.pop(i)#删除索引为i的列表元素

i=i+1

ask=[[7,16,0],[2,9,0],[6,1,0]]
direct={1:"向上",-1:"向下"}
now=3
d=1
print("当前楼层:",now,"方向:",direct[d])
for i in range(len(ask)):

t=__________

   t=t//abs(t)

          ask[i][2]=t          #t表示该请求的电梯运行方向
while len(ask)>0:

stop=[0]*21#标记1-20各楼层是否停靠

scan(now,d)

print("\n",direct[d],",停靠楼层:",end="")

if d==1:

st=1;ed=21;now_next=20

else:

st=20;ed=0;now_next=1

for i in range(st,ed,d):

if stop[i]==1:

print(i,end="")

now=now_next

________

(2)若电梯当前在3楼,方向为向上,ask=[[7,16,0],[6,1,0],[2,9,0],[17,1,0],[10,15,0]],则第一趟向上运行依次停靠的楼层是:_____(按停靠顺序填写数字)。
2022-06-01更新 | 80次组卷
操作题 | 较难 (0.4)
【推荐2】新学年伊始,某校团委需组织高一高二年级学生进行社团选课活动。为了帮助学校团委更好地 开展学生社团选课工作,小北同学设计了一个简易的网上社团选课系统。该选课系统的部分界 面、网页模板文件、数据表文件等如图a、图b、图c、图d 所示。
图a       (选课界面)
图b (登陆成功后的欢迎模板)
图c   (登录账号密码数据表 users)
图d       (选课表字段结构)
具体实现程序代码如下:

from flask import Flask, render_template, request

import sqlite3

app = Flask(__name__)

#主页面路由命令及对应的视图函数, 代码略

@app.route("/login",methods=["POST"])

def login():

#登陆页面路由命令conn = sqlite3.connect("data/data.db")

cur = conn.cursor()

cur.execute("SELECT * FROM users")       #   数据表 users 如图 c 所示

infolist = cur.fetchall()

user = {}

userlist = []

for line in infolist:

userlist.append(line[1:3])

for i in range(0,len(userlist)):

___________

cur.close()

conn.close()

username = request.form.get("username")

password = request.form.get("password")

if username in user and user[username] == password:

return render_template("welcome.html", ____________ ,Title="欢迎界面") #当输入的用户名密码错误时,弹出账号不存在或密码错误页面,代码略

@app.route(          ) , methods=["GET","POST"])          #选课页面路由命令

def xk():

if request.method == "GET":

return render_template("xk.html",text="请填报你喜欢的社团") else:

xm = request.form.get("xm")

bj = __________         #登录页面中输入班级的文本框的名称为“bj”

kc = request.form.get("kc")

conn = sqlite3.connect("data/data.db")

cur = conn.cursor()

cur.execute("create table if not exists 选课表(班级 integer, 姓名 text,课程 名称 text)")

cur.execute("insert   into   选 课 表 ( 班 级 ,   姓 名 , 课 程 名 称 ) values(%d,'%s','%s')" %(bj,xm,kc ))

_____

cur.close();   conn.close()

return render_template("login.html", text="恭喜你, 选课成功!") if __name__ == "__main__":


(1) 结合相关截图,请在划线处填入合适的代码。
(2)(多选)根据图a所示, 程序中加框语句应修改为____________
A.app.run(host="0.0.0.0",port=8080)
B.app.run(host="192.168.10.106",port=8080)
C.app.run("192.168.10.106", 8080)
D.app.run(host="127.0.0.1",port=808
2022-08-02更新 | 96次组卷
操作题 | 较难 (0.4)
【推荐3】有如下Python程序对列表内的数字进行排序:

请编写并补充代码,完善程序:
(1)第5行下划线处应填入____________               
(2)第8行下划线处应填入____________
(3)该程序采用了__________算法。
2022-05-23更新 | 61次组卷
共计 平均难度:一般