2016-02-11 3 views
0

Я пытаюсь вызвать новую функцию под названием def importFile():, но я получаю сообщение об ошибке, что importFile() не определен. Что я делаю неправильно, я знаю, что это, вероятно, просто, но я новичок в кодировании.Как мне вызвать функцию в python?

Это раздел, где я пытаюсь вызвать функцию:

def main(): 
     myMode = input("Encrypt 'e' or Decrypt 'd': ") 
     textFile = input("Would you like to import a text file 'Y' or 'N': ") 
     if textFile == 'y' or textFile == 'Y': 
      importFile() 
     myMessage = input('Enter your text: ') 
     myKey = input('Enter your key: ') 
     myKey2 = input('Enter your second key: ') 
     if myMode == 'encrypt' or myMode == 'e': 
      translated = encryptMessage(myKey, myMessage) 
     elif myMode == 'decrypt' or myMode == 'd': 
      translated = decryptMessage(myKey, myMessage) 
     print('%sYour Message: ' % (myMode.title())) 
     print(translated) 
     print() 

Это функция:

def importFile(): 
    importText = [] 
    fileLocation = input('What is the name of the text file: ') 
    open('fileLocation''r') 

Как вы можете сказать, что я пытаюсь импортировать текстовые файлы, чтобы питон, но не прошли первое препятствие :)

Вот весь код:

LETTERS = 'ZABCDEFGHIJKLMNOPQRSTUVWXY' 
def main(): 
    myMode = input("Encrypt 'e' or Decrypt 'd': ") 
    textFile = input("Would you like to import a text file 'Y' or 'N': ") 
    if textFile.lower() == 'y' : 
     importFile() 
    myMessage = input('Enter your text: ') 
    myKey = input('Enter your key: ') 
    myKey2 = input('Enter your second key: ') 
    if myMode == 'encrypt' or myMode == 'e': 
     translated = encryptMessage(myKey, myMessage) 
    elif myMode == 'decrypt' or myMode == 'd': 
     translated = decryptMessage(myKey, myMessage) 
    print('%sYour Message: ' % (myMode.title())) 
    print(translated) 
    print() 

def encryptMessage(key, message): 
    return translateMessage(key, message, 'encrypt') 

def decryptMessage(key, message): 
    return translateMessage(key, message, 'decrypt') 

def translateMessage(key, message, mode): 
    translated = [] 

    keyIndex = 0 
    keys = key.upper() 

    for symbol in message: 
     num =LETTERS .find(symbol.upper()) 
     if num != -1: 
      if mode == 'encrypt': 
       num += LETTERS .find(key[keyIndex]) 
      elif mode == 'decrypt': 
       num -= LETTERS .find(key[keyIndex]) 

      num %= len(LETTERS) 

      if symbol.isupper(): 
       translated.append(LETTERS[num]) 
      elif symbol.islower(): 
       translated.append(LETTERS[num].lower()) 

      keyIndex += 1 
      if keyIndex == len(key): 
       keyIndex = 0 
     else: 
      translated.append(symbol) 
    return ''.join(translated) 
if __name__ == '__main__': 
    main() 

def importFile(): 
    importText = [] 
    fileLocation = input('What is the name of the text file: ') 
    open('fileLocation','r') 

main() 
+0

Является ли функция в том же файле '.py', как main()? –

+0

Функция должна быть определена до того, как основная программа наберет эту строку кода. Если они находятся в одном файле, вам, вероятно, потребуется переместить определение функции * выше * в основную программу. – Prune

+1

Кроме того, вместо 'textFile == 'y' или текстового файла == 'Y'', было бы более Pythonic сказать' textFile.lower() ==' y'' –

ответ

2

Это

if __name__ == '__main__': 
    main() 

def importFile(): 
    importText = [] 
    fileLocation = input('What is the name of the text file: ') 
    open('fileLocation','r') 

main() 

часть.

В

if __name__ == '__main__': 
    main() 

функция main() называется, но importFile() еще не определена. Переместите его выше обозначенных строк.

Дополнительный main() в конце не нужен.

+0

Спасибо, это очень полезный ответ. –

2

Вы уверены, что используете основной код после определения кода ImportFile? При вводе этого кода:

def main(): 
    myMode = input("Encrypt 'e' or Decrypt 'd': ") 
    textFile = input("Would you like to import a text file 'Y' or 'N': ") 
    if textFile == 'y' or textFile == 'Y': 
     importFile() 
    myMessage = input('Enter your text: ') 
    myKey = input('Enter your key: ') 
    myKey2 = input('Enter your second key: ') 
    if myMode == 'encrypt' or myMode == 'e': 
     translated = encryptMessage(myKey, myMessage) 
    elif myMode == 'decrypt' or myMode == 'd': 
     translated = decryptMessage(myKey, myMessage) 
    print('%sYour Message: ' % (myMode.title())) 
    print(translated) 
    print() 

def importFile(): 
    importText = [] 
    fileLocation = input('What is the name of the text file: ') 
    open('fileLocation','r') 

main() 

Он должен и отлично работает на моей машине.

Возможно, ваша функция импортаFile находится в другом файле, и в этом случае вы должны добавить from ****file**** import importFile.

Еще одна вещь, которую я заметил, это ваша последняя строка, open('fileLocation','r'), нужна запятая.

После просмотра вашего редактирования:

if __name__ == '__main__': 
    main() 

должен быть после importFile определен.

+0

'Traceback (последний последний звонок): Файл« E: \ invent with python #####. Py », строка 52, в main() Файл« E: \ invent with python #####. py ", строка 6, в основном importFile() NameError: name 'importFile' не определен' –

+0

Я по-прежнему получаю эту ошибку –

+1

Не помещая все содержимое вашего файла, я не могу сделайте что-нибудь –