①将明文逆序排列,如明文“Python.org”,逆序后为“gro.nohtyP”;
②循环利用数字密钥串的每一位数字 k,依次对字符串中的每个英文字母右移 k 个字母替代,其他字符保持不变。如:输入的数字密钥串为“2024”,“gro.nohtyP”的“n”是第 4个字母,使用密钥串“2024”中的第 4个数字“4”进行右移 4个字母替代,即“n”往后移 4个字母,得到的是“r”,如下表所示:
③经过数字密钥串处理后,将字符串中的每个字符转换为 8位二进制 ASCII码值(不足 8位的左边补 0,补足 8位),并分成两段(左边 4位为高四位,右边 4位为低四位),如字符“i”的二进制 ASCII码值为 01101001,高四位为 0110,低四位为 1001;
④将高四位转化为十六进制数(如 0110转化为 6);
⑤将低四位与高四位执行异或(⊕)操作后转化为十六进制数(提示:0⊕0=0,0⊕1=1,1⊕0=1,1⊕1=0,如 1001⊕0110=1111,1111转化为 F);
⑥依次连接④⑤得到的两位十六进制数,即为该字符的密文,如“i”的密文为“6F”;
⑦将每个字符的密文按照顺序依次连接即为最终的密文。程序运行结果如图所示。
实现上述功能的 Python程序如下,请回答下列问题:
def xor(x,y): #两个一位二进制数异或
if x==y:
return "0"
else:
return "1"
def DtoB(D): #十进制转 8位二进制,高位段和低位段根据规则处理
B=""
for i in range(8):
r=D%2
D=D//2
B=str(r)+B
for j in range(4):
B=B[:j+4] ++ B[j+5:]
return B
mingw=input("请输入明文:")
key=input("请输入数字密钥串:")
mingw=
miw="";pos=0
for i in range(len(mingw)):
if "A"<=mingw[i]<="Z" or "a"<=mingw[i]<="z":
if "A"<=mingw[i]<="Z":
t=ord("A")
else:
t=ord("a")
miw+=chr((ord(mingw[i])-t+int(key[pos]))%26+t)
else:
miw+=mingw[i]
new=""
for i in range(len(miw)):
new+=DtoB(ord(miw[i]))
hex="0123456789ABCDEF";result="";
for i in range(0,len(new),4):
n=int(new[i])
for j in range(1,4):
n=n*2+int(new[i+j])
print("密文为:",result)
设m=12,n=10,如图a所示,是已经预约成功的5个订单对应的各景点车上人数。当输入新的订单号:“4,5,8,”,程序提示预约不成功,如图b所示。
图a | 图b |
#定义函数,读取订单中的人数和上下车景点编号
def order(s):
num,start,end=0,0,0
j,k=0,1
for i in range(len(s)):
if ch==",":
tmp=int(s[j:i])
j=i+1
if k==1:
num=tmp
elif k==2:
start=tmp
elif k==3:
end=tmp
return num,start,end
#主程序
#读取已预约成功订单,存入列表 lst,数据元素为订单号
# 如 lst=["2,1,5,","1,3,7,","3,2,8,","2,4,7,","3,5,10,"]
n=10 #站点数
m=12 #巴士空座位总数
count=[0]*(n+1)
for i in lst: #处理预约成功订单
num,start,end=order(i)
for i in range():
count[i]+=num
s=input("请输入订单号:")#处理新订单
a,b,c=order(s)
if a*b*c!=0:
if :
print("预约不成功,请重新输入!")
else:
print("预约成功!")
else:
print("订单格式输入错误,请重新输入!")
#更新预约成功订单,再次等待新订单,代码略
图 a
图 b
图 c
编写程序:对给定的标准答案,生成并输出每道题的填涂信息,对应的选项、分值(答对得2分,答错或不答得0分),以及最后的总得分,输出结果如图c所示。请回答下列问题:
import random
n = 12 # 定义题数
da = "ABCDDABDAACA" # 存储标准答案
def check(s, w, da): # 判断得分
if :
return 2
else:
return 0
a=[[] for i in range(n)] # 存储每题 ABCD 选项的编码值
ans = [""] * n # 存储模拟生成的填涂选项
res = ""
s=""
total = 0
for i in range(n): # 模拟生成每题选项对应的 4 位编码
t = random.randint(0, 4) # 随机生成第 i+1 题的填涂情况
for j in range(4):
if :
a[i].append(1)
else:
a[i].append(0)
print("填涂卡情况:")
num=1
for i in range(n): # 打印填涂卡情况
s = s + str(a[num-1])
for j in range(4):
if a[num-1][j] == 1:
res = res + str(num) + "" + s + "
s = ""
if (i+1) % 3 == 0 :
print(res)
res = ""
num-=11
print("题号 选项 分值")
for i in range(n): # 输出每题的答案和得分
if ans[i] != " " :
df = check(ans[i], i, da)
print(f"{i+1} {ans[i]} {df}") #按格式要求输出
total += df
else:
df = 0
print(f"{i+1} 未填涂 {df}")
print(f"该学生选择题得分:{total}分")
程序代码如下:
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
img=np.array(Image.open("chenchen.jpg").convert("L"))
rows,cols=img.shape
for i in range(rows):
for j in range(cols):
if():
img[i,j]=1
else:
img[i,j]=0
plt.imshow(img,cmap="gray")
plt.show()
下列说法正确的是( )
k = 3
cj,Sum = 0,0,0
for i in range(len(s)):
ch = s[i]
if '0' <= ch <= '9':
c = c * 10 + int(ch)
j += 1
else:
if j == k:
Sum += c
j,c = 0,0
字符串 s 为"wz500ai2024ok102"时,执行该程序段后,Sum 的值为( )
s = "Li20An24K04ao" ; i = 0
while i < len( s ) :
if "A" <= s[ i ] <= "Z" :
s = s[ : i ] + s[ i + 1 : ]
elif "0" <= s[ i ] <= "9" :
s = s[ : i ] + str( ( int(s[ i ]) + 8 ) % 10 ) + s[ i + 1 : ]
else :
s = s[ : i ] + chr( ( ord( s[ i ] ) – 95 ) % 26 + 97 ) + s[ i + 1 : ]
i = i + 1
执行上述程序后,s的值为( )