2016-02-11 79 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

函数与main()是否在同一个'.py'文件中? –

+0

该函数必须在主程序命中该行代码之前定义。如果它们在同一个文件中,则可能需要将主程序上面的函数定义*移动。 – Prune

+1

此外,不是使用'textFile =='y'或textfile =='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代码后调用main吗?当输入此代码:

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() 

应该和做,完全正常工作在我的机器上。

也许您的importFile函数位于不同的文件中,在这种情况下,您应该添加from ****file**** import importFile

我注意到的另一件事是你的最后一行open('fileLocation','r'),需要一个逗号。

看你的编辑后:

if __name__ == '__main__': 
    main() 

必须importFile定义之后。

+0

'追踪(最近呼叫最后): 文件“E:\ invent with python #####。py”,line 52,in main() File“E:\ invent with python #####。py“,第6行,在主 importFile() NameError:名称'importFile'未定义' –

+0

我仍然收到此错误 –

+1

没有把你的文件的全部内容我不能做任何事 –