Python 2.7.4, кто-нибудь знает, почему это не работает?

Следующий код для одного из моих упражнений, чтобы передать тему,

Это мой код:

rot13=raw_input("Please write your text! ")

Здесь я спрашиваю у пользователя текст

for i in range(len(rot13)):

И в этой части я проверяю текст по буквам с помощью for.

 if rot13[i]=="a":
     rot13[i]="n"
 elif rot13[i]=="b":
     rot13[i]="o"
 elif rot13[i]=="c":
     rot13[i]="p"
 elif rot13[i]=="d":
     rot13[i]="q"
 elif rot13[i]=="e":
     rot13[i]="r"
 elif rot13[i]=="f":
     rot13[i]="s"
 elif rot13[i]=="g":
     rot13[i]="t"
 elif rot13[i]=="h":
     rot13[i]="u"
 elif rot13[i]=="i":
     rot13[i]="v"
 elif rot13[i]=="j":
     rot13[i]="w"
 elif rot13[i]=="k":
     rot13[i]="x"
 elif rot13[i]=="l":
     rot13[i]="y"
 elif rot13[i]=="m":
     rot13[i]="z"
 elif rot13[i]=="n":
     rot13[i]="a"
 elif rot13[i]=="o":
     rot13[i]="b"
 elif rot13[i]=="p":
     rot13[i]="c"
 elif rot13[i]=="q":
     rot13[i]="d"
 elif rot13[i]=="r":
     rot13[i]="e"
 elif rot13[i]=="s":
     rot13[i]="f"
 elif rot13[i]=="t":
     rot13[i]="g"
 elif rot13[i]=="u":
     rot13[i]="h"
 elif rot13[i]=="v":
     rot13[i]="i"
 elif rot13[i]=="w":
     rot13[i]="j"
 elif rot13[i]=="x":
     rot13[i]="k"
 elif rot13[i]=="y":
     rot13[i]="l"
 elif rot13[i]=="z":
     rot13[i]="m" 

print rot13

Кто-нибудь знает, почему это не работает? Я не хочу делать это с кодированием.

1 ответ

Есть несколько проблем с вашим кодом.

Во-первых, вы пытаетесь присвоить символ строке, но строки неизменны, поэтому вы не можете поменять символы, используя =, Во-вторых, вам не нужно жестко кодировать каждый символ и его отображение. Вы должны использовать оператор модуля (%).

Основное решение состоит в том, чтобы перебрать каждый символ, превратить его в число, добавить 13 к нему и превратить его обратно в персонажа. Вам нужно будет рассмотреть случай, когда ваш ввод - "z", а полученный символ лежит за пределами алфавита. Вот где вам придется использовать оператор модуля, чтобы заставить персонажа обернуться вокруг.

Вот пример:

def rot13(string):
  result = []
  for char in string:
    shiftBy = 65 # uppercase 'A'
    if char.islower():
      shiftBy = 97 # lowercase 'a'

    newChar = chr(((ord(char) + 13 - shiftBy) % 26) + shiftBy)
    result.append(newChar)

  return ''.join(result)

print rot13("abcXYZ")

ord преобразует символ в его числовое представление (например, 'a' становится 97)

chr выполняет обратное вычисление (например, 97 становится 'a')

Другие вопросы по тегам