Как создать круговой алфавит в Python, чтобы буква после z была a, а буква перед a - z - PullRequest
1 голос
/ 29 мая 2019

Есть ли в 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])

Ответы [ 3 ]

3 голосов
/ 29 мая 2019

Использование itertools.cycle и string.ascii_lowercase:

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

Это бесконечный итератор с строчными буквами:

>>> "".join(next(circular_alphabet ) for _ in range(50))
'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwx'
0 голосов
/ 29 мая 2019

Альтернативное (старомодное?) Решение:

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)
0 голосов
/ 29 мая 2019

Я думаю, вы должны использовать circular queue. для получения дополнительной информации, пожалуйста, проверьте эту ссылку .

...