Я новичок в программировании (6 недель, самоучка в сети с "codecademy" и "python the hard way"). Я решил, что пришло время начать экспериментировать с написанием кода без направления, и я уперся в стену со своим вторым проектом.
Я пытаюсь создать «секретный кодер», который берет строку raw_input и заменяет все буквы в ней следующей в алфавите. С моими очень ограниченными знаниями я решил, что словарь должен быть подходящим способом. С «небольшой» помощью в гугле я написал следующее:
alpha = {"a" : "b", "b" : "c", "c" : "d", "d" : "e", "e" : "f", "f" : "g","g" : "h"
, "h" : "i", "i" : "j", "j" : "k", "k" : "l", "l" : "m","m" : "n", "n" : "o"
, "o" : "p", "p" : "q", "q" : "r", "r" : "s","s" : "t", "t" : "u", "u" : "v"
, "v" : "w", "w" : "x", "x" : "y", "y" : "z", "z" : "a"}
entry = raw_input("Please write a sentence you want to encode: ")
def encode(entry, letters):
for k, v in letters.iteritems():
if k in alpha:
entry = entry.replace(k, v)
return entry
print encode(entry, alpha)
У меня проблема в том, что только половина букв в моей строке заменяется правильными значениями из словаря. «a» и «b» будут напечатаны как «c», тогда как «a» должно быть напечатано как «b», а «b» должно быть напечатано как «c» и так далее.
Где я полностью теряюсь, так это в том, что когда я заменил каждое значение в своем словаре числами, это сработало отлично.
В этом суть, я действительно не понимаю, что не так с моим кодом.
Спасибо заранее за вашу помощь.
PS: Это был мой самый первый пост на stackoverflow, надеюсь, я сделал все как надо.
РЕДАКТИРОВАТЬ: Поскольку я пока не могу дать репутацию, я просто поблагодарю вас всех за ваши полезные ответы. Теперь я вижу немного яснее, где моя ошибка, и я воспользуюсь предоставленной здесь информацией, чтобы исправить свой код и поработать над его правильным пониманием. Также я вижу, что есть гораздо более логичные и простые подходы к решению такого рода проблем. Функции все еще немного размыты для меня, но я думаю, что это нормально так рано.
a
в вашей строке, и вы зацикливаете и меняете всеa
наb
, но затем вы выполняете цикл и меняете всеb
наc
(которые могут включатьa
, которые вы изменили наb
s и т.д...) - person Jon Clements♦   schedule 19.08.2016for e in entry: result += letters[e]...
, и python сделает остальную работу за вас. Что-то, что вам стоит усвоить (чем раньше, тем лучше), это то, что вы не должны изменять объект, над которым вы работаете, это избавит вас от множества головных болей в будущем. - person   schedule 19.08.2016