【问题标题】:Hackerrank Caesar Cipher Python solutionHackerrank Caesar Cipher Python 解决方案
【发布时间】:2021-08-07 20:56:12
【问题描述】:

我找到了这个示例代码:https://shareablecode.com/snippets/python-solution-for-hackerrank-problem-caesar-cipher-6a6b-Tike

在下面的for循环中:

for c in s:
        if c.isupper():
            res.append(symbols_up[(symbols_up.index(c)+k)%len(symbols_up)])
        elif c.islower():
            res.append(symbols_low[(symbols_low.index(c)+k)%len(symbols_low)])
        else:
            res.append(c)

我不明白为什么我们必须添加%len(symbols_up)]?如果我们使用res.append(symbols_up[symbols_up.index(c)+k]),感觉效果很好 有人能帮我理解一下吗?

【问题讨论】:

  • 会发生什么,例如Z?
  • 就是实现这部分问题描述:"如果换档带你越过字母表的末尾,只需旋转回到字母表的前面。" .

标签: python python-3.x string


【解决方案1】:

len(symbols_up) = len(symbols_low) = 26 如果我们不添加 %26,那么在字符的原始整数值上加上 k 得到的字符的整数值,可能会超过最后一个字符的整数值,即 'z' 在小写和 'Z 的情况下' 在大写的情况下。因此,我们添加 %26(等于 len(symbols_low) 和 len(symbols_up))来应用旋转而不超过允许的整数值。 你可以试试下面的代码。比你附上的代码更简单明了。

def caesarCipher(s, k):
    res=""
    for i in range(len(s)):
        if s[i].isalpha():
            if s[i].isupper():
              res+=chr(ord('A')+(ord(s[i])-ord('A')+k)%26)
            else:
              res+=chr(ord('a')+(ord(s[i])-ord('a')+k)%26)    
        else:
            res+=s[i]
    return res

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多