【问题标题】:How to create a circular Alphabet in Python so that the letter after z is a and the letter before a is z如何在 Python 中创建一个圆形字母,使 z 之后的字母是 a,a 之前的字母是 z
【发布时间】:2019-05-29 11:54:31
【问题描述】:

Python中是否有一个函数可以轻松创建一个循环字母表,使得z后面的字母是a,a前面的字母是z?

我用chr().join(Alphabet) 尝试了一些方法,但没有成功,因为我收到了错误消息an integer is required (got type str)

for character in word:
    if chr(Alphabet[Alphabet.find(character)) >= "z":
        new_Alphabet = Alphabet.join(Alphabet)
    elif chr(Alphabet[Alphabet.find(character)) <= "a":
        new_Alphabet = Alphabet.join(Alphabet[:-1])

【问题讨论】:

  • 我完全不知道你想做什么。

标签: python ascii circular-list alphabet


【解决方案1】:

使用itertools.cyclestring.ascii_lowercase

from itertools import cycle
import string
circular_alphabet = cycle(string.ascii_lowercase)

这是一个带有小写字母的无限迭代器:

>>> "".join(next(circular_alphabet ) for _ in range(50))
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwx'

【讨论】:

    【解决方案2】:

    我认为你必须使用circular queue。更多信息请查看link

    【讨论】:

      【解决方案3】:

      替代(旧式?)解决方案:

      def cycle_letter(ch,up=True):
        upper = 'A' <= ch <= 'Z'
        ch = ch.lower()
        letters = 'abcdefghijklmnopqrstuvwxyz'
        pos = letters.find(ch)
        if pos < 0: return ch
        length = len(letters)
        pos += 1 if up else length-1
        ans = letters[pos%length]
        if upper: ans = ans.upper()
        return ans
      
      ################################################################################
      
      def cycle_string(s,up=True):
        return ''.join(cycle_letter(ch,up) for ch in s)
      
      ################################################################################
      
      if __name__ == '__main__':    #Test
        s = cycle_string('Hello, World!')
        print(s)
        s = cycle_string(s,False)
        print(s)
      

      【讨论】:

        【解决方案4】:

        如果它对某人有帮助,这个 sn-p 将一个单词移动所需的空格数。 (例如shift_word('abcdef', 12) = 'opqrst'

        def shift_word(word: str, spaces: int) -> str:
            first_ordinal = 97
            last_ordinal = 122
            alphabet_size = 26
        
            return ''.join(chr((ord(letter) - last_ordinal - spaces - 1) % alphabet_size + first_ordinal) for letter in word)
        

        它只是逐个字母地迭代单词,应用一些模数学来计算字母应该落在哪里的正确“桶”,并确保结果在序数 97-122 的边界内(字母 a-z)

        【讨论】:

          猜你喜欢
          • 2016-02-10
          • 2013-11-22
          • 2016-04-25
          • 1970-01-01
          • 2021-08-27
          • 1970-01-01
          • 1970-01-01
          • 2018-03-16
          • 1970-01-01
          相关资源
          最近更新 更多