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'
)