2015-09-07 4 views
1

Я собираюсь начать, размещая то, что я до сих пор то сказать вам, что происходит ...Цезарем в Cipher: Python

PasteBin

osalt = ".,!? ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
def decode(): 
    int = 0 
    counter = 0 
    msg = requestString("What would you like Decoded?").upper() 
    print "Now decoding, '"+msg+"'." 
    print "==========Please Wait==========" 
    while (int < len(osalt)): 
    dmsg = "" 
    nsalt = "" 
    int += 1 
    int2 = 0 
    shift = int-1 
    while int2 <= len(osalt): 
     if int2+shift < len(osalt): 
     nsalt += osalt[int2+shift] 
     else: 
     nsalt += osalt[int2+shift-len(osalt)-1] 
     int2 += 1 
    for letter in msg: 
     index = nsalt.find(letter) 
     dmsg += nsalt[index] 
    print dmsg 
    counter += 1 
    print counter 
decode() 

Что это должно сделать список 31 возможность кодирования сообщения при декодировании. Вы вводите закодированное сообщение, а затем оно проходит, перемещаясь по символу соли 1 за раз ... так что вторая соль будет выглядеть так: «Z.,!? ABCDEFGHIJKLMNOPQRSTUVWXY».

Проблема, которую я испытываю, заключается в том, что она не перемещает соль вообще, и она заканчивает печать ввода 31 раз.

Я много раз просматривал свой код, и я не могу понять, как это сделать.

Спасибо.

+0

Две вещи: (i) «почему этот код не работает» не подходит для SO, задайте более интересные вопросы, (ii) приведенный выше код не соответствует стандартам кодирования/отступов PEP8 - если вы хотите, чтобы люди помогли вам, пожалуйста, сделайте это как можно проще для них. – thebjorn

+0

(i) Почему Соль не перемещается во время моего второго заявления? (ii) Извините, я не понимал, что вы можете выделить, а затем нажмите кнопку кода ... Я просто нажимал пробел, пока не обратился к блоку кода, отредактированному. Но я также предоставил необходимый паштет с правильным углублением. –

+0

Правильный отступ использует 4 пробела. 2 пробела просто сбивает с толку. Pastebin - отличный сервис, но вам не нужно использовать его, чтобы задавать вопросы на SO. – thebjorn

ответ

0

Во-первых, при размещении кода убедитесь, что он может быть выполнен. В настоящее время у вас есть неопределенная функция (requestString) и несогласованный отступ в строке print counter.

Что касается вопроса, у вас есть две ошибки здесь. Во-первых, посмотрите на

index = nsalt.find(letter) 
dmsg += nsalt[index] 

вы находите позицию письма в nsalt, а затем просто добавить тот же письмо dmsg. Вот почему вы всегда печатаете одно и то же. Измените один из них на osalt.

Во-вторых, если вы это сделаете, вы получите сообщение об ошибке string index out of range. Это потому, что ваша строка nsalt на самом деле одна символа длиннее, чем osalt, и содержит дублирующее письмо. Это происходит из-за линии

while int2 <= len(osalt): 

, где вы должны использовать только <. int2 начинается с 0 и обозначает текущую позицию в nsalt, поэтому он должен заканчиваться на len(osalt) - 1.

+0

Спасибо за это ... Но у меня есть один вопрос сейчас. Когда он запрашивает ввод, если я положил: «? TZWEUWTLWFRE, TWPXA» Один из результатов должен быть: «ВАША ПРОГРАММА РАБОТАЕТ». Вместо этого я получаю: "ZOUR PROGRAM XORKS." как ближайший результат. –

+0

Nevermind, я удалил -1 из строки 18, когда пытался избавиться от ошибки ..., которая исправила ее. Благодарим за помощь! –

+0

К сожалению, я не могу ответить на это, поскольку я понятия не имею, как вы получили эту строку. – fjarri