#python
#python
Вопрос:
Я создаю программу, которая принимает предложение и искажает его, пока не будет запущена через «дегарблер»
Вероятно, есть лучший способ сделать это, но я был бы признателен, если бы все показали мне, как исправить то, что я делаю неправильно
def sencoder (sentence):
sentence = sentence.replace ("a","h")
sentence = sentence.replace ("s","j")
sentence = sentence.replace ("d","k")
sentence = sentence.replace ("f","l")
sentence = sentence.replace ("b","g")
sentence = sentence.replace ("z","t")
sentence = sentence.replace ("q","y")
sentence = sentence.replace ("w","u")
sentence = sentence.replace ("e","i")
sentence = sentence.replace ("r","o")
sentence = sentence.replace ("x","p")
sentence = sentence.replace ("c","b")
sentence = sentence.replace ("v","n")
sentence = sentence.replace ("m","m")
print sentence
def decoder (sentence):
sentence = sentence.replace ("h","a")
sentence = sentence.replace ("j","s")
sentence = sentence.replace ("k","d")
sentence = sentence.replace ("l","f")
sentence = sentence.replace ("g","b")
sentence = sentence.replace ("t","z")
sentence = sentence.replace ("y","q")
sentence = sentence.replace ("u","w")
sentence = sentence.replace ("i","e")
sentence = sentence.replace ("o","r")
sentence = sentence.replace ("p","x")
sentence = sentence.replace ("b","c")
sentence = sentence.replace ("n","v")
sentence = sentence.replace ("m","m")
print sentence
sentence = ""
choice = raw_input ("Do you want to decode or encode: ").lower()
while sentence != "quit":
sentence = raw_input("Enter the code: ")
if choice == "encode":
decoder(sentence)
elif choice == "decode":
sencoder(sentence)
else:
print "Please make a valid decision"
Справка
Комментарии:
1. В чем проблема? Чего вы ожидаете?
2. О, мои глаза… Попробуйте
str.translate
илиre.sub
для таких вещей.3. Как название соответствует коду? Я не вижу replace(«x»,»w») нигде в коде…
4. Ваша опция encode запускает decoder, а опция decode запускает encoder. Это специально? Обычно опция декодирования запускает декодер, а опция кодирования запускает кодер.
Ответ №1:
Вот подсказка: вместо этого используйте этот translate
метод.
>>> import string
>>> t = string.maketrans("abcdef", "bcdefa")
>>> "abracadabra".translate(t)
'bcrbdbebcrb'
>>> t2 = string.maketrans("bcdefa", "abcdef")
>>> "bcrbdbebcrb".translate(t2)
'abracadabra'
Комментарии:
1. Спасибо, по крайней мере, вы помогли мне решить проблему вместо «Мои глаза! Помоги, о боже».
Ответ №2:
Я создаю программу, которая принимает предложение и искажает его, пока не будет запущена через «дегарблер»
Обратите внимание, что это не будет работать с любым видом входного предложения:
encode ("ah") = "hh" decode ("hh") = "aa"
Если два алфавита могут перекрываться, вам необходимо изменить свой алгоритм, чтобы сохранить частично закодированные данные отдельно от входной строки.
Из вашего примера не очевидно, является ли это проблемой, но я подумал, что лучше указать на это.
Ответ №3:
Ваш сценарий «работает на меня». Возможно, вас беспокоит то, что ваши значения кодирования и декодирования меняются местами?
То есть ввод «encode» вызывает ваш декодер, а ввод «decode» вызывает ваш кодер.
И, как вы видите в комментариях, пожалуйста, используйте translate
! 🙂