首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python -尝试编写不忽略空格的vigenere密码

Python -尝试编写不忽略空格的vigenere密码
EN

Stack Overflow用户
提问于 2018-02-20 00:22:23
回答 1查看 191关注 0票数 0

我尝试更改我的Vigenere程序,以便它可以输出带有空格的消息。应该这样做: translatedMessage('JPZFR DTZA NKC HFHOUC','cloudy','d') =>‘来自未来的问候’

代码语言:javascript
运行
复制
 def translateMessage(message, key, mode):
    translated = ''
    alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    keyIndex = 0
    message = message.upper()
    key = key.upper()

    for symbol in message:
        xyz = alphabet.find(symbol.upper())
        if xyz != -1:
            if mode == 'encrypt' or 'e':
                xyz += alphabet.find(key[keyIndex]) + 1
            elif mode == 'decrypt' or 'd':
                xyz -= alphabet.find(key[keyIndex]) + 1

            xyz %= len(alphabet)

            if symbol.isupper():
                translated += alphabet[xyz]
            elif symbol.islower():
                translated += alphabet[xyz].lower()

            keyIndex += 1
            if keyIndex == len(key):
                keyIndex = 0
        else : translated += symbol #this will add space as it is

    return translated

取而代之的是: translatedMessage('JPZFR DTZA NKC HFHOUC','cloudy','d') => 'MBOAV CWLP IOB KRWJYB‘

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-20 00:37:21

您的代码看起来基本上没问题,但您可以注意到,无论您选择哪种模式,您都会进行加密。

这是由您的

代码语言:javascript
运行
复制
if mode == 'encrypt' or 'e':

线路。因为oroperator precedence==低,所以它被解析为:

代码语言:javascript
运行
复制
if (mode == 'encrypt') or 'e':

因为mode是'd',所以(mode == 'encrypt')False。但由于'e'是一个非空字符串,因此在布尔上下文中它的计算结果为True。所以,无论你选择哪种模式,(mode == 'encrypt') or 'e'都是True

您需要的是:

代码语言:javascript
运行
复制
  if mode == 'encrypt' or mode =='e':
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48870171

复制
相关文章

相似问题

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