Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法洗牌数组,可能修复吗?_Python - Fatal编程技术网

Python 无法洗牌数组,可能修复吗?

Python 无法洗牌数组,可能修复吗?,python,Python,正在尝试实现加密算法,以下是到目前为止的源代码: 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 Shuffe

正在尝试实现加密算法,以下是到目前为止的源代码:

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()
问题是,我能够在以下方面对价值观进行调整:

bn = ['0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111', '1000', '1001', '1010', '1011', '1100', '1101', '1110', '1111']
但是,不包括:

bn1 = ['AA', 'AT', 'AG', 'AC', 'TA', 'TT', 'TG', 'TC', 'GA', 'GT', 'GG', 'GC', 'CA', 'CT', 'CG', 'CC']
需要注意的事实是,相同的代码用于两个目的:

这里是第一个街区:

 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()
这是第二个街区:

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()
第二个块生成输出:

[无,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无,无]

但是,如果我在第一个块中将数组
bn1[]
中的值传递给
bn[]
,它将生成所需的输出。但是,不会在第二个块中生成输出。这可能是什么原因造成的


在这里被敲了很长一段时间,任何解决这个问题的帮助都将不胜感激。

故障在第一个块,您重写了变量c的值,而没有创建或使用临时数组。当第二个块使用它时,c的所有值都已设置为100,因此,它立即中断,将bngrid1的值保留为一个无数组

编辑:

比如说,你可以首先使用一个补丁,将c的值传递给一个新的变量:

bn = ['0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111', '1000', '1001', '1010', '1011', '1100', '1101', '1110', '1111']
c_temp = [ item for item in c] #don't use c_temp=c, that's wrong
minpos = []
bngrid = [None] * 16
for x in range(16):
    minpos = c_temp.index(min(c_temp))
    if c_temp[minpos] == 100:
        break
    bngrid[minpos] = bn[x]
    c_temp[minpos] = 100
print('\n shuffeled bngrid using the keygrid is :\n\t\t')
print(bngrid)
print()
第二个也一样

或者您可以为其创建一个函数:

def func(c):
    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()

我没有测试代码,因此我不建议复制粘贴它。

您的代码很难阅读和调试,因为有许多变量和数组称为a、b、c等。下次尝试只发布问题的要点并命名变量,以便其他人容易理解:)


关于您的问题-如果代码在第一部分中有效,但在第二部分中无效,那么问题可能出在数组c中(如果不深入代码,很难说出有哪些数字,因为名称也没有说明任何内容),但我可以看到,在第一部分中,在循环中,您将一些c值设置为100。在第二个循环中,您再次通过c(修改了c,有许多100个值),如果您找到100,您就打破了循环。也许它只是在开始时找到100个,然后在第一次迭代中打破循环?尝试在每个循环中打印一些内容,这样您至少可以知道它是否进入循环以及进入循环的次数,这将帮助您调试它。祝你好运!:)

问题似乎在于,您正在块中使用c数组中的所有值,该块将bn数组随机化,然后将值设置为100

因此,当bn1块运行时,对c.index(min(c))的所有调用都返回零


在进入bn块之前,您可以尝试创建一个c的副本,并使用此副本将bn1块随机化。

请将代码减少到最低限度以再现问题。您可以为此创建一个函数,该函数将接受变量c并在不影响原始数组的情况下在本地使用它。或者,您可以使用另一行将c的副本传递给另一个var。