Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.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 如何确保输入是16的倍数,如果不是,则添加填充_Python - Fatal编程技术网

Python 如何确保输入是16的倍数,如果不是,则添加填充

Python 如何确保输入是16的倍数,如果不是,则添加填充,python,Python,基本上,我希望有一个输入的消息,如果它不是一个16个valkue添加随机字母到它,使其成为16个倍数 这是我当前的代码: import math s = "IYGGRTOCTOERGTDKHUTAOHEIIATTOICNNRIHDSRGKENEACA!" i = 16 rows = [s[x:x+i] for x in range(0, len(s), i)] #print('\n'.join(rows)) columns = list(zip(*rows)) print i, col

基本上,我希望有一个输入的消息,如果它不是一个16个valkue添加随机字母到它,使其成为16个倍数

这是我当前的代码:

import math

s = "IYGGRTOCTOERGTDKHUTAOHEIIATTOICNNRIHDSRGKENEACA!"
i = 16
rows = [s[x:x+i] for x in range(0, len(s), i)]
    #print('\n'.join(rows))
columns = list(zip(*rows))
print i, columns
这并没有什么特别之处,而是将输入的内容每16个字符拆分一次,从每个coulmn中提取第一个字母,然后输出,等等,这是一个非常基本的转置密码

所以我要做的是找出s是否是16的倍数,如果不是的话,给s添加一些随机字母,直到它是 那么如何在python中实现这一点呢


谢谢各位

首先计算一下您有多少个“额外”字符:

extra = len(s) % 16
那么,有两种可能性:

额外>0 计算填充16个字符块所需的填充量:

padsize = 16 - extra
最后,在末尾添加
padsize
填充字符(可能是空格
):

s = s + (' ' * padsize)
额外==0
s
就是这样

把所有的东西放在一起 并且不使用
焊盘尺寸

extra = len(s) % 16
if extra > 0:
    s = s + (' ' * (16 - extra))
随机填充 当然,
不是唯一可能的填充。您可以使用从特定列表中选择一个字符并将其用作填充

有一些很好的预定义字符列表,您可以使用或类似:

padding = random.choice(string.letters)
或者使用您自己的可能填充物列表:

padding = random.choice("x|#_ ")
所以,把一切重新组合起来:

import string
import random

padding = random.choice(string.letters)
extra = len(s) % 16
if extra > 0:
    s = s + (padding * (16 - extra))

输入是一个字符串。你的意思是字符串的长度是16的倍数吗?是的,所以我想检查
“iyggrtocotergtdkhutaoheiattoicnnrihdsrgkeneaca!”
是16的倍数,你没有在听。你又犯了同样的错误。非常感谢你的详细讲解。它真的很有帮助,一个问题而不是空格,是否可以随机选择一个字符?是的,我扩展了答案,涵盖了这一点。
import math
import string
import random

s = "IYGGRTOCTOERGTDKHUTAOHEIIATTOICNNRIHDSRGKE"

while len(s) % 16 !=0:
    s = s + random.choice(string.letters)

# s is now a multiple of 16 random characters
# continue processing