我是编程场景的新手。我很难掌握这段代码的本质。
import time
from random import randint
replies =["Yes","No","Possibly", "Ask again later", "IDK"]
def question():
print "What is your question?"
question = raw_input()
print "Thinking"
time.sleep(3)
print replies[randint(0,4)]
end()
def end():
print "Thanks for playing! Do you want to try again?"
user_reply = raw_input()
if user_reply == "yes":
question()
print "Welcome to the magic 8-ball"
question()
我的问题是:
谢谢。
答案 0 :(得分:2)
question()
功能仍在"打开"或至少仍在运行,其所有变量和其他资源都在使用。
这称为"递归"并且非常值得你学习。调用函数question()
,调用end()
,如果玩家选择继续,则会再次调用调用question()
等的end()
。您将获得一堆函数,在question()
和end()
之间交替,所有这些仍然存在并占用资源。如果游戏持续时间过长,将消耗所有可用资源,并且程序以stack overflow
错误结束 - 适用于此站点!
每个调用都发生在调用例程的末尾,这种情况称为"尾递归。"一些计算机语言的编译器可以识别这个并用循环替换递归,因此调用例程确实在新例程开始之前关闭。我不相信标准的Python解释器会这样做,因此例程将在计算机堆栈上构建。