如何确保输入是16的倍数,如果没有添加填充

use*_*674 2 python

基本上我想要一个输入的消息,如果它不是一个16的valkue添加随机字母,使其成为16的mulitple

这是我目前的代码:

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
Run Code Online (Sandbox Code Playgroud)

这没什么好看的,只需每16个字符分割一次输入,然后从每个coulmn中取出第一个字母,然后输出它等,这是一个非常基本的转换密码

所以我想要做的是弄清楚s是16的倍数,如果没有添加一些随机字母s,直到它是如此,我怎么能在python中实现这一点?

多谢你们

Ste*_*ppo 8

首先计算你有多少"额外"字符:

extra = len(s) % 16
Run Code Online (Sandbox Code Playgroud)

然后,有两种可能性:

额外> 0

您可以计算填充16个字符块所需的填充量:

padsize = 16 - extra
Run Code Online (Sandbox Code Playgroud)

最后,在末尾添加padsize填充字符(可能是空格) at the end:

s = s + (' ' * padsize)
Run Code Online (Sandbox Code Playgroud)

extra == 0

s 它的确如此.

将所有东西放在一起

而不是使用padsize:

extra = len(s) % 16
if extra > 0:
    s = s + (' ' * (16 - extra))
Run Code Online (Sandbox Code Playgroud)

随机填充

当然,' '不是唯一可能的填充.您可以使用random.choice从特定列表中选择一个字符并将其用作填充.

有一些很好的预定义字符列表,你可以使用string.letters等:

padding = random.choice(string.letters)
Run Code Online (Sandbox Code Playgroud)

或使用您自己的填充列表:

padding = random.choice("x|#_ ")
Run Code Online (Sandbox Code Playgroud)

所以,把所有东西放在一起:

import string
import random

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