Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Str对象在Python中不可调用?_Python_String - Fatal编程技术网

Str对象在Python中不可调用?

Str对象在Python中不可调用?,python,string,Python,String,我正在尝试制作一个简单的魔法八球程序,它会问一个问题,给出一个随机的回答,然后提示用户是否想再试一次。 在“再次询问”部分之前,一切正常,在该部分中,所有的地狱都会消失,出现以下错误: TypeError:“str”对象不可调用 我对Python还是一个新手,老实说,可能只是犯了一个新手错误,但我相信寻求帮助并没有什么丢脸的 代码如下: def question(): question = str(input("Ask a yes or no question: ")) rep

我正在尝试制作一个简单的魔法八球程序,它会问一个问题,给出一个随机的回答,然后提示用户是否想再试一次。 在“再次询问”部分之前,一切正常,在该部分中,所有的地狱都会消失,出现以下错误:

TypeError:“str”对象不可调用

我对Python还是一个新手,老实说,可能只是犯了一个新手错误,但我相信寻求帮助并没有什么丢脸的

代码如下:

def question():
    question = str(input("Ask a yes or no question: "))

    replies = ["It is certain",
     "It is decidedly so",
     "Without a doubt",
     "Yes definitely",
     "You may rely on it",
     "As I see it, yes",
     "Most likely",
     "Outlook good",
     "Yes",
     "Signs point to yes",
     "Reply hazy try again",
     "Ask again later",
     "Better not tell you now",
     "Cannot predict now",
     "Concentrate and ask again",
     "Don't count on it",
     "My reply is no",
     "My sources say no",
     "Outlook not so good",
     "Very doubtful",
               ]

    rand_num = random.randint(0, 20)

    print(replies[rand_num])

    def ask_again():
        again = input("Would you like to ask another question? (Y/N): ")
        if again == "Y" or "y":
            question()
        elif again == "N" or "n":
            print("Thank you and goodbye.")
        else:
            print("That is not an acceptable answer.")
            ask_again()
    ask_again()
question()

def-question():#
def-question():#
再次==“Y”或“Y”
不做您认为它做的事情,请看您使用名称
question
来表示两种不同的事情:函数和字符串。不能两者都是,重命名一个或另一个。您希望避免使用递归反复提问。请参见
再次==“Y”或“Y”
不做您认为它做的事情,请参见您将名称
问题
用于两种不同的事情:函数和字符串。不能两者都是,重命名一个或另一个。您希望避免使用递归反复提问。看他们没有覆盖任何内容。函数是全局函数,字符串是局部函数。但是当他们期望它是函数时,就使用了local。因此,名称
question
被重新定义。我正在重新编写答案,以使用更恰当的定义。这仍然不是正确的术语。他们正在掩盖这个全球名称(这里作为结束语)。恐怕我缺乏足够的词汇来恰当地解释这里发生了什么,并提供必要的细节。我愿意听取关于如何改进答案的建议,尽管答案已经更好了
ask_reach()
在父范围(函数
question
的本地名称空间)中查找
question
名称,而不是在全局范围中查找
question
名称。除了使用不同的名称外,您还可以通过在
ask\u reach()
函数中添加
global question
语句来告诉Python查找全局问题来修复此问题。但这类似于用一根麻绳绑住你的断腿继续行走,而不是让骨头固定好。:-)它们不会覆盖任何内容。函数是全局函数,字符串是局部函数。但是当他们期望它是函数时,就使用了local。因此,名称
question
被重新定义。我正在重新编写答案,以使用更恰当的定义。这仍然不是正确的术语。他们正在掩盖这个全球名称(这里作为结束语)。恐怕我缺乏足够的词汇来恰当地解释这里发生了什么,并提供必要的细节。我愿意听取关于如何改进答案的建议,尽管答案已经更好了
ask_reach()
在父范围(函数
question
的本地名称空间)中查找
question
名称,而不是在全局范围中查找
question
名称。除了使用不同的名称外,您还可以通过在
ask\u reach()
函数中添加
global question
语句来告诉Python查找全局问题来修复此问题。但这类似于用一根麻绳绑住你的断腿继续行走,而不是让骨头固定好。:-)
def question(): # <<<<< here you define `question` as the function
    question = str(input("Ask a yes or no question: ")) # <<< and here you "shadow" that with a string (see below the long explanation).
def ask_again():
        again = input("Would you like to ask another question? (Y/N): ")
        if again == "Y" or "y":
            question() # <<< here, question is not a function anymore because you redefined the name `question` to a string on the second line of the function definition