回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>试图实现一个加密算法,以下是到目前为止的源代码:</p>
<pre><code>import random
import itertools
msg = input(" Enter the KEY : ")
ascivalue = sum(ord(ch) for ch in msg)
a = []
i=0
b = [None] * 16
c = [None] * 26
d = [None] * 26
print("ASCII VALUE=", ascivalue)
print('')
# print('The Shuffeled values are : \n')
for x in range(ascivalue):
a.append(x)
random.Random(4).shuffle(a)
#a.append(random.randint(1, ascivalue))
# print('\t\t',a)
for x in range(16):
b[x] = a[x]
print( "\n16 randomly generated numbers are : \n ")
print('\t\t',b)
for i in range(16):
d = b[i] % 26
# m = d
if (c[d] == None):
c[d] = d
else:
while (c[d] != None):
d = d + 1
if d == 26:
d = 0
c[d] = d
print("\n After normalization numbers are :\n")
random.Random(4).shuffle(c)
# print('\t\t',c)
print('')
while None in c:
c.remove(None)
print('\t\t',c)
e = [None] * 16
f = [None] * 16
g = [None] * 16
i = 0
for i in range(16):
e[i] = c[i] + 64
if(e[i] == 64):
f[i] = chr(90) # corresponding character of each values
else:
f[i] = chr(e[i])
i = i + 1
print("\nRandomly generated English letters – playfair cipher grid is : ")
print('')
for row in range(4):
for col in range(4):
print(f.pop(), end=' ')
print()
# print('\nascii value of characters in the keygrid is: ')
# for i in range(16):
# g[i] = ord(f[i])
# i = i + 1
# print('')
# print('\t\t',g)
print('')
lst = list(itertools.product([1, 0], repeat=4))
print('The 4*4 Binary grid is : ')
print('')
for row in range(4):
for col in range(4):
print(lst.pop(), end=' ')
print()
bn = ['0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111', '1000', '1001', '1010', '1011', '1100', '1101', '1110', '1111']
minpos = []
bngrid = [None] * 16
for x in range(16):
minpos = c.index(min(c))
if c[minpos] == 100:
break
bngrid[minpos] = bn[x]
c[minpos] = 100
print('\n shuffeled bngrid using the keygrid is :\n\t\t')
print(bngrid)
print()
for row in range(4):
for col in range(4):
print(bngrid.pop(), end=' ')
print()
bn1 = ['AA', 'AT', 'AG', 'AC', 'TA', 'TT', 'TG', 'TC', 'GA', 'GT', 'GG', 'GC', 'CA', 'CT', 'CG', 'CC']
minpos1 = []
bngrid1 = [None] * 16
for x in range(16):
minpos1 = c.index(min(c))
if c[minpos1] == 100:
break
bngrid1[minpos1] = bn1[x]
c[minpos1] = 100
print('\n shuffeled bngrid using the keygrid is :\n\t\t')
print(bngrid1)
print()
# for row in range(4):
# for col in range(4):
# print(dnagrid.pop(), end=' ')
# print()
</code></pre>
<p>问题是,我能够在以下方面重新排列值:</p>
<pre><code>bn = ['0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111', '1000', '1001', '1010', '1011', '1100', '1101', '1110', '1111']
</code></pre>
<p>但是,不是在:</p>
<pre><code>bn1 = ['AA', 'AT', 'AG', 'AC', 'TA', 'TT', 'TG', 'TC', 'GA', 'GT', 'GG', 'GC', 'CA', 'CT', 'CG', 'CC']
</code></pre>
<p>需要注意的是,相同的代码用于两个目的:</p>
<p>这里是第一个街区:</p>
<pre><code> bn = ['0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111', '1000', '1001', '1010', '1011', '1100', '1101', '1110', '1111']
minpos = []
bngrid = [None] * 16
for x in range(16):
minpos = c.index(min(c))
if c[minpos] == 100:
break
bngrid[minpos] = bn[x]
c[minpos] = 100
print('\n shuffeled bngrid using the keygrid is :\n\t\t')
print(bngrid)
print()
</code></pre>
<p>这是第二个街区:</p>
<pre><code>bn1 = ['AA', 'AT', 'AG', 'AC', 'TA', 'TT', 'TG', 'TC', 'GA', 'GT', 'GG', 'GC', 'CA', 'CT', 'CG', 'CC']
minpos1 = []
bngrid1 = [None] * 16
for x in range(16):
minpos1 = c.index(min(c))
if c[minpos1] == 100:
break
bngrid1[minpos1] = bn1[x]
c[minpos1] = 100
print('\n shuffeled bngrid using the keygrid is :\n\t\t')
print(bngrid1)
print()
</code></pre>
<p>第二个块生成输出:</p>
<blockquote>
<p>[None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None]</p>
</blockquote>
<p>但是,如果我将数组中的值传递给第一个块中的<code>bn1[]</code>到<code>bn[]</code>,它将生成所需的输出。但是,不会在第二个块中生成输出。可能是什么原因造成的?你知道吗</p>
<p>我们已经在这里罢工了很长一段时间,任何帮助解决这一点将不胜感激。你知道吗</p>