2015-11-09 2 views
0

Мой код должен вывести:Try/За исключением Python

Encipher 
Enter 1 to encipher or 2 to decipher: 1 
Enter text you wish to encipher: My dog has fleas. 
Enter the number of characters to shift: 7 
The encrypted text is: Fr whz atl yextl. 
Decipher 
Enter 1 to encipher or 2 to decipher: 2 
Enter text you wish to decipher: Fr whz atl yextl. 
The most likely shift is: 7 
My dog has fleas. 

Но это не работает, и я не понимаю, как использовать попробовать/за исключением того, чтобы сделать мой код сделать это.

while True: 
    try: 
     num = int(raw_input('Enter 1 or 2:')) 
     break 
    except ValueError: 
     print "You have to enter 1 or 2, try again" 

    if (num == 1): 
     num = int(raw_input('Enter a number:')) 
     num = int(raw_input('encipher')) 
     print "Enter text to encipher" 
     print "Enter the number of characters you want to shift" 

    elif (num == 2): 
     num = int(raw_input('Enter a number:')) 
     num = int(raw_input('decipher')) 
     print "Enter text to decipher" 
     print "Enter the number of characters you want to shift" 
+1

Так в чем же проблема? Как это не ведет себя так, как вы ожидаете? –

+0

Добро пожаловать в StackOverflow. Прочтите и следуйте инструкциям по отправке в справочной документации. [Минимальный, полный, проверяемый пример] (http://stackoverflow.com/help/mcve) применим здесь. Мы не можем эффективно помочь вам, пока вы не опубликуете свой код и не сможете точно описать проблему. «Это не работает» не является точным описанием. Канонический ответ: «Это потому, что он закодирован неправильно». :-) – Prune

+0

если эта строка 'num = int (raw_input ('Enter 1 или 2:'))' разрешено (что произойдет в любое время, когда пользователь вводит ANY целое число, а не только 1/2!), То 'break' строка будет работать, что означает, что она вырвется из цикла while. так как остальная часть вашего кода находится внутри вашего цикла while, остальная часть кода не будет работать. выньте оператор break и добавьте 'if num not in [1,2]: добавьте ValueError' –

ответ

0

Непосредственная проблема заключается в том, что вы не получаете исключение, просто потому, что введенный номер не соответствует тексту, который вы напечатали. Python автоматически не считывает и не интерпретирует сообщения, отправленные на экран. Вместо этого попробуйте это в верхней части: перейдите в бесконечный цикл, который настаивает на юридических данных. Продолжайте, пока не получите юридические данные. Захватите каждый номер, проверьте, является ли он законным; выйдите из цикла, если он соответствует вашим потребностям.

while True: 
    while True: 
     num = int(raw_input('Enter 1 or 2:')) 
     if num in [1,2]: 
      break 
     print "You have to enter 1 or 2, try again" 

    if (num == 1): 
     ... 

У вас все хорошо, чтобы закодировать только несколько строк и заставить работать, прежде чем продолжить. Обратите внимание, что у вас есть несколько концептуальных проблем в нижнем коде. Для isntance вы запрашиваете у пользователя ввод текста для шифрования, но затем вы пытаетесь преобразовать его в целое. Это доставит вам ValueError.

Задайте новый вопрос, если вы снова застряли.

+0

несколько вещей. вам не хватает блока try вокруг ввода. и вы должны использовать в наборе вместо списка как более быстрый поиск :) –

+0

Почему бы не устранить это вложенное 'while' и просто сделать' if num == 1: ... elif num == 2: ... else: print 'try again''? – TigerhawkT3

+0

Внутренний цикл получает юридический ввод; внешний цикл продолжает шифровать и расшифровывать до тех пор, пока пользователь не умрет и не будет уложен в склепе. – Prune

Смежные вопросы