我正在做一个练习,它要求编写一个函数,为给定的消息创建列密码。我想进一步扩展这一点,并让这个列密码应用于所有长度的消息。对于那些不知道列密码的人来说,会像这样工作。
说我的信息是“这是一个测试赛弗”。我们指定每一行的长度为5。现在,每个字符串的长度可能不足以被特定的行长度整除,所以我们用"X“填充消息。然后,这条信息看起来是这样的:
THISI
SATES
TCYPH
ERXXX
将发送的消息将类似于"TSTEHACRITYXSEPXISHX“
下面是我到目前为止所拥有的,首先是一个为使用该消息做准备的函数:
def prep_msg(message, row_length):
message = message.upper().replace(' ', '')
num_xs = len(message) % row_length
message += 'X' * (row_length - num_xs)
return message
接下来,我想创建一个字典,其中每个列都是键,值是与该列相关联的字母。在这一步之后,我可以继续处理我的消息。然而,我被困在这一步,因为我得到的输出似乎完全是空的。我的第二个函数如下所示:
def column_dict(message, row_length):
message = prep_msg(message, 3)
num_cols = range(row_length)
column_dict = {}
for x in range(len(message)):
for i in num_cols:
if x % row_length == i:
column_dict['column_{0}'.format(i)] = [].append(message[x])
return column_dict
我使用的信息是这个message = "This message is very secret"
以下是我的函数的输出:
prep_msg(message, 3)
>> 'THISMESSAGEISVERYSECRETX'
column_cypher(message, 3)
>> {'column_0': None, 'column_1': None, 'column_2': None}
有人能给我指出为什么我的第二个功能不能工作的方向吗?谢谢!
发布于 2017-01-18 21:28:13
因此,由于@Prune,我最终改变了函数的结构。这是它最终为任何对未来感兴趣的人工作的方式,并在这个问题上绊倒了。
def prep_msg(message, row_length):
message = message.upper().replace(' ', '')
num_xs = len(message) % row_length
message += 'X' * (row_length - num_xs)
return message
def encode_column(message, rows):
prep_msg(message, row_length)
col_list = [message[i::row_length] for i in range(row_length)]
encoded_message = ''.join(col_list)
发布于 2017-01-18 21:13:57
追加将参数添加到给定的列表中,但是修改已经到位。返回值是None,它会进入您的字典。将语句更改为在右侧有更好的表达式,如[messagex] .修改成累加字母。
更好的是,请注意,您的字典更像是一个列表(即数组)。通过将基本结构转换为字符串列表,您可能会做得更好:
["THISI", "SATES", "TCYPH", "ERXXX"]
这里的索引比构造"column_{0}“要整洁得多。然后使用简单的列表理解来构建列-主字符串。
这足够让你动弹了吗?
https://stackoverflow.com/questions/41729272
复制相似问题