【问题标题】:How do I call a function in python?如何在python中调用函数?
【发布时间】:2016-02-11 21:26:07
【问题描述】:

我正在尝试调用一个名为 def importFile(): 的新函数,但是我收到错误消息,指出未定义 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')

正如您可能知道的那样,我正在尝试将文本文件导入 python,但还没有通过第一个障碍:)

所有代码如下:

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

【问题讨论】:

  • 函数和main()在同一个.py文件中吗?
  • 函数必须在主程序到达那行代码之前定义。如果它们在同一个文件中,您可能需要将函数定义移动到 主程序之上。
  • 另外,与其使用textFile == 'y' or textfile == 'Y',不如说textFile.lower() == 'y'更Pythonic
  • 此时没有文件。会不会是这个问题?
  • 您已经在 importFile def 之前调用 main。将其移至代码末尾。顺便说一句,你为什么要调用 main 两次?

标签: python function encryption vigenere


【解决方案1】:

这是

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

【讨论】:

  • 谢谢,这是一个非常有帮助的回复。
【解决方案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 定义之后。

【讨论】:

  • Traceback (most recent call last): File "E:\invent with python#####.py", line 52, in <module> main() File "E:\invent with python#####.py", line 6, in main importFile() NameError: name 'importFile' is not defined
  • 如果不把你文件的全部内容都放进去,我什么都做不了
  • 更新了答案,importfile 需要在 if name == 'main': main() 之后
  • 在我的代码中,我调用了 main 两次,所以我需要将 importFile 移到另一个函数上方。无论如何谢谢你的回答很好:)
猜你喜欢
  • 1970-01-01
  • 2019-04-24
  • 1970-01-01
  • 2018-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多