2010-10-07 2 views
1

ошибка, при которой я получаюЦезарь Cipher в питона

Traceback (most recent call last): 
    File "imp.py", line 52, in <module> 
    mode = getMode() 
    File "imp.py", line 8, in getMode 
    mode = input().lower() 
    File "<string>", line 1, in <module> 
NameError: name 'encrypt' is not defined 

Ниже приведен код.

# Caesar Cipher 


MAX_KEY_SIZE = 26 

def getMode(): 
    while True: 
     print('Do you wish to encrypt or decrypt a message?') 
     mode = input().lower() 
     if mode in 'encrypt e decrypt d'.split(): 
      return mode 
     else: 
      print('Enter either "encrypt" or "e" or "decrypt" or "d".') 

def getMessage(): 
    print('Enter your message:') 
    return input() 

def getKey(): 
    key = 0 
    while True: 
     print('Enter the key number (1-%s)' % (MAX_KEY_SIZE)) 
     key = int(input()) 
     if (key >= 1 and key <= MAX_KEY_SIZE): 
      return key 

def getTranslatedMessage(mode, message, key): 
    if mode[0] == 'd': 
     key = -key 
    translated = '' 

    for symbol in message: 
     if symbol.isalpha(): 
      num = ord(symbol) 
      num += key 

      if symbol.isupper(): 
       if num > ord('Z'): 
        num -= 26 
       elif num < ord('A'): 
        num += 26 
      elif symbol.islower(): 
       if num > ord('z'): 
        num -= 26 
       elif num < ord('a'): 
        num += 26 

      translated += chr(num) 
     else: 
      translated += symbol 
    return translated 

mode = getMode() 
message = getMessage() 
key = getKey() 

print('Your translated text is:') 
print(getTranslatedMessage(mode, message, key)) 
+1

Это не связано с ошибкой, которую вы видите, но вы можете захотеть взглянуть на 'string.translate()' http://docs.python.org/library/stdtypes.html#str.translate –

ответ

7

Проблема здесь:

print('Do you wish to encrypt or decrypt a message?') 
mode = input().lower() 

В Python ввода 2.x использование raw_input() вместо input().

Python 2.x:

  • Чтение строки из стандартного ввода: raw_input()
  • Чтение строки из стандартного ввода, а затем оценить его: input().

Python 3.x:

  • Чтение строки из стандартного ввода: input()
  • Чтение строки из стандартного ввода, а затем оценить его: eval(input()).
2

input()оценивает выражение, которое вы печатаете. Вместо этого используйте raw_input().

+0

Его работа ... thnk u так много 4 ур помочь ... – Abhijit

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