Python 置换(使用密钥顺序交换二进制文件)
我想用41325768键重新排列这个“01110100”, 预期结果:11100010,代码结果:10110010Python 置换(使用密钥顺序交换二进制文件),python,python-3.x,Python,Python 3.x,我想用41325768键重新排列这个“01110100”, 预期结果:11100010,代码结果:10110010 def perm(block, key): block = list(block) key = list(map(int, str(key))) # converting key to list key = [x - 1 for x in key] # subtracting 1 from each (zero based) new_key =
def perm(block, key):
block = list(block)
key = list(map(int, str(key))) # converting key to list
key = [x - 1 for x in key] # subtracting 1 from each (zero based)
new_key = [key[i] for i in key]
block = [block[i] for i in new_key]
block = "".join(block)
return block
- 因此,我添加了这一行
来解决这个问题,但结果非常接近:11100100new_key=[key[I]for I in key]
不知道该怎么做来修复它…你想要的和你拥有的之间的区别在于对钥匙的理解不同。例如,关于键开头的“4”,您希望它表示“将第一个字符放在第四个位置”,但它被用来表示“从第四个位置取第一个字符” 您可以通过以下方式更改为预期操作:
输入/输出:def perm(块,键): 新块=[“”]*len(键) 对于ix,枚举中的kval(键): 新块[int(kval)-1]=块[ix] 返回“”。加入(新块) keyc=输入('排列键:') plain=输入('要编码的字符串:') 打印('\nResult:',perm(str(普通),str(keyc)))
我想我理解了这意味着什么,但你的方法是错误的,这是我编写的代码的一个简单版本置换键:41325768 要编码的字符串:01110100 结果:11100010
输出:bi_s = '01110100' key_s = '41325768' new_bi = '' bi_list = list(map(int, str(bi_s))) key_list = list(map(int, str(key_s))) print("The New Key") for i in key_list: # print(bi_list[i-1], end='', flush=True) new_bi += str(bi_list[i-1]) print(new_bi) print("The Origin Key") for i in bi_list: print(i, end='', flush=True)
The New Key 10110010 The Origin Key 01110100
你能告诉我们结果是什么吗?pp=perm('011101100',41325768)print(pp)10110010,我在纸上做了排列应该是:11100010@yungmaz13你的解决方案没有解决问题仍然10110010“将第一个字符放在第四位”正是我的意思…没问题,感谢您解释这行代码的作用:new_block=[”“]*len(key),以及?
之后的那一行将创建一个与键长度相同的字符列表,并填充空格new_block=[”“]*len(key)
。在迭代过程中,会产生一个计数,在本例中是“
的字符。在这里,如果在范围(len(key))中为ix设置key
后接:
kval=key[ix]