【问题标题】:How to cycle through the alphabet index in python? [duplicate]如何在python中循环遍历字母索引? [复制]
【发布时间】:2020-01-08 01:36:22
【问题描述】:

问题: 在 NSA,你怎么能分辨出性格外向的人和性格内向的人? Va gur ryringbef, gur rkgebireg ybbxf ng gur BGURE thl'f fubrf.

我在 USENET 上发现了这个笑话,但妙语被打乱了。也许你能破译它?根据 Wikipedia,ROT13 (http://en.wikipedia.org/wiki/ROT13) 经常用于混淆 USENET 上的笑话。

提示:对于这个任务,你应该只替换字符。不是空格、标点符号、数字等。测试示例:

我的代码:

def rot13(message):
    solved = ""
    for i in message:
        if i == "," or "-" or "/" or "." or "1" or "2" or "3" or "4" or "5" or "6" or "7" or "8" or "9":
            solved += i
        else:
            decipher = chr(ord(i)+13)
            solved += decipher
    return solved.upper()

我需要解决的问题 每次我尝试更改超过第 13 个索引的字母时,它都会给我一个空格而不是字母。 例如,当我在函数中输入字母“u”时,它给了我一个“_”,但我想要“h”。如何在 Python 中循环遍历字母表,而不是仅在第 26 个索引处结束

【问题讨论】:

  • if i in 'allyourcharacters':
  • 你不能说if i == a or b or c or d,但你可以说if i==a or i==b or ...if i in (a,b,c,d):
  • 您声称“当我在函数中输入字母“u”时,它给了我一个“_”,但我想要“h””。但是您的代码没有这样做。 rot13("u") 返回 "U",因为您的测试总是通过。
  • @ShadowRanger 这是一个错误,但引用的“重复”并不是整个问题的答案。然而,关于如何处理 ROT13 有很多重复。
  • @MarkTolonen:是的。 Looking for that one among the many options 现在。 :-)

标签: python cycle alphabet


【解决方案1】:

试试这个:

import string

letters = string.ascii_letters
letters += letters  # now you can easily go for 'z' + 26, etc.

print ''.join( [letters[letters.find(k) + 13] if k in letters else k for k in msg] )

输出:

in tHE ELEvAtors, tHE ExtrovErt LooKs At tHE OTheR Guy's sHoEs

【讨论】:

    【解决方案2】:

    您需要使用modulo 运算符:% 来“环绕”字母表。

    (ord(i) + 13) % 26 = # value between 0 and 25, the substituted letter index
    

    模运算在加密中非常重要,并且被广泛使用。

    【讨论】:

      猜你喜欢
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 2017-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 2022-09-22
      相关资源
      最近更新 更多