首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >列Cypher函数

列Cypher函数
EN

Stack Overflow用户
提问于 2017-01-18 20:55:45
回答 2查看 54关注 0票数 0

我正在做一个练习,它要求编写一个函数,为给定的消息创建列密码。我想进一步扩展这一点,并让这个列密码应用于所有长度的消息。对于那些不知道列密码的人来说,会像这样工作。

说我的信息是“这是一个测试赛弗”。我们指定每一行的长度为5。现在,每个字符串的长度可能不足以被特定的行长度整除,所以我们用"X“填充消息。然后,这条信息看起来是这样的:

代码语言:javascript
运行
复制
THISI
SATES
TCYPH
ERXXX

将发送的消息将类似于"TSTEHACRITYXSEPXISHX“

下面是我到目前为止所拥有的,首先是一个为使用该消息做准备的函数:

代码语言:javascript
运行
复制
def prep_msg(message, row_length):
    message = message.upper().replace(' ', '')
    num_xs = len(message) % row_length
    message += 'X' * (row_length - num_xs)
    return message

接下来,我想创建一个字典,其中每个列都是键,值是与该列相关联的字母。在这一步之后,我可以继续处理我的消息。然而,我被困在这一步,因为我得到的输出似乎完全是空的。我的第二个函数如下所示:

代码语言:javascript
运行
复制
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"

以下是我的函数的输出:

代码语言:javascript
运行
复制
prep_msg(message, 3)
>> 'THISMESSAGEISVERYSECRETX'

column_cypher(message, 3)
>> {'column_0': None, 'column_1': None, 'column_2': None}

有人能给我指出为什么我的第二个功能不能工作的方向吗?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-18 21:28:13

因此,由于@Prune,我最终改变了函数的结构。这是它最终为任何对未来感兴趣的人工作的方式,并在这个问题上绊倒了。

代码语言:javascript
运行
复制
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)
票数 1
EN

Stack Overflow用户

发布于 2017-01-18 21:13:57

追加将参数添加到给定的列表中,但是修改已经到位。返回值是None,它会进入您的字典。将语句更改为在右侧有更好的表达式,如[messagex] .修改成累加字母。

更好的是,请注意,您的字典更像是一个列表(即数组)。通过将基本结构转换为字符串列表,您可能会做得更好:

代码语言:javascript
运行
复制
["THISI", "SATES", "TCYPH", "ERXXX"]

这里的索引比构造"column_{0}“要整洁得多。然后使用简单的列表理解来构建列-主字符串。

这足够让你动弹了吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41729272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档