我正在研究一个简单的想法,以便更好地掌握Python。我虽然遇到了麻烦。
这是我的代码:
def backToMain(f):
print('Back to Main Menu (B)')
back = input('>>>')
back = back.lower()
if back == 'b':
mainMenu()
else:
print('\nThat is not a valid input.\n\n')
f
def instruct():
instructtxt= str('INSTRUCTIONS')
instructlen = len(instructtxt) * 6
print(instructtxt.center(instructlen,'~'))
backToMain(instruct())
我想要发生的事情是每次用户不在主菜单上时(即说明,信用等),系统会在底部显示“返回主菜单”。如果按下'b'键,它们将被带回mainMenu()函数。如果没有,他们会被告知这不是一个有效的输入,并带回到他们当前所处的功能的开头。
问题是,因为我想在多个其他函数中使用backToMain()函数,当用户在提示中输入除“b”之外的任何内容时,它们将被带到他们试图退出的功能。目前发生的事情是,一旦你输入instruct()的print语句就会重复无限。
有人认为他们可以帮助我吗?如果我不清楚,请告诉我,我会尽力澄清。
谢谢!
答案 0 :(得分:0)
您在错误的地方使用括号。当您撰写instruct()
时,请致电instruct()
。调用函数时,在调用函数之前会对其参数进行求值。因此,当您执行backToMain(instruct())
时,必须调用instruct()
以将其返回值作为参数传递,这意味着它再次调用instruct
,再次调用它等等。
要传递函数本身(而不是其返回值),请执行backToMain(instruct)
。
在backToMain
你有相反的问题。最后,您需要f()
。 f
本身只是对函数的引用,而不是调用,因此它不会执行任何操作。要调用函数,您需要使用括号;传递你不需要使用括号的函数对象。
那就是说,这不是一个很好的方法。它创建了许多递归调用。如果用户输入了大量无效输入,他可能会达到递归限制。如果不了解程序的整体结构,很难说它有多好,但总的来说,最好避免递归作为一种“重新开始”的技术;你应该选择一个循环。