浙教版(2019)选修1《3.1 字符串》2022年同步练习卷(2)
发布:2024/4/20 14:35:0
一、选择题
-
1.有如下 python 程序段:
s=“1R2u3n_to45“;num=0
for i in s:
if“a“<=i<=“z“or“A“<=i<=“Z“:
continue
elif“0“<=i<=“9“:
num=num*10+int(i)
else:
break
该程序段运行后,num的值为( )组卷:0引用:1难度:0.4
二、非选择题
-
4.某明文字符串仅由大、小写英文字母组成,为实现加密,小朱依次对该明文中的每个字符进行如下操作:
①将明文中每个字符转换成其对应的十进制 ASCII 码值;
②明文的密钥由 0-7 这 8 个数字循环产生,如图 a 所示;
③加密过程中,先将每个明文字符的十进制 ASCII 码值转换成 8 位二进制数,再将每个字符对应的密钥转换为 4 位二进制数,最后,将由明文字符的十进制 ASCII 码值转换成的 8 位二进制数中的左边 4 位二进制数和右边 4 位二进制数,分别和由密钥数字转换成的 4 位二进制数逐位进行异或运算:1⊕1=0,1⊕0=1,0⊕1=1,0⊕0=0。
例如:明文字符串“Programming”中字母“a”用二进制表示是 01100001,其对应的密钥是数字 5,用二进制表示是 0101,加密后结果是 00110100,如图b所示。
④将每个字符的加密结果按行输出,如图c所示。请回答下列问题:
(1)输入字符串“China”,则字符“a”加密后的结果为
(2)实现上述功能的 Python 代码段如下,请在①②横线处将代码补充完整。
(3)加框处的代码有错误,请修改 ______。
s=input(“输入待加密的原文:“)
k=0;s1=“”;s2=“”
print(“加密结果为:“)
for i in range(0,len(s)):
ch=①
m=k
for j in range(0,4):
t1=str((ch%2+m%2)%2)
t2=②
s1=t1+s1;s2=t2+s2
ch=ch//2;m=m//2
print(s2+s1)
s1=“”;s2=“”k=k%8+1 组卷:3引用:2难度:0.4 -
5.有一种 ASCII 字符加密的算法,其加密过程如下:
①将明码中每个字符的 ASCII 码转为八位二进制,依次连接
②位置加密:每 4 位一组进行移位,第 1 组左移一位,并将原第一位数码移至最后(如 0110 转化为1100),第 2 组右移一位,并将原最后一位数码移至头部(如 0001 转化为 1000),第 3 组左移...以此类推,实现位置加密,并将每组移动后的结果转换成十进制,按顺序连接
③值加密:随机产生一个密钥 key,在符号列表['+','*','//','%']中取出对应运算符号,将②中的十进制结果分别与密钥 key 进行运算,顺次连接求得该字符的密文,(如 key 为 3,取得运算符'%',则字符'a'的高位密文为 12%3=0,低位密文为 8%3=2,顺次连接后得'a'的密文为'02'
④将每个字符的密文顺序连接,得到最终字符串密文。
用 Python 编写的程序运行结果如下图所示,请回答下列问题:
(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
eturn 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)组卷:3引用:1难度:0.3