如何根据用户输入重新启动程序?
- 2025-02-18 09:24:00
- admin 原创
- 29
问题描述:
我正在尝试根据用户输入使用 if 测试重新启动程序。
该代码不起作用,但它大致就是我想要的:
answer = raw_input('Run again? (y/n): ')
if answer == 'n':
print 'Goodbye'
break
elif answer == 'y':
#restart_program???
else:
print 'Invalid input.'
我想要做的是:
如果你回答 y - 程序将从顶部重新启动
如果你回答 n - 程序结束(该部分有效)
如果您输入其他任何内容,它应该打印“无效输入。请输入 y 或 n...”或其他内容,并再次要求您输入新的内容。
我非常接近使用“while true”循环的解决方案,但程序要么重新启动,无论您按什么键(n 除外),要么退出,无论您按什么键(y 除外)。有什么想法吗?
解决方案 1:
此行将无条件地从头重新启动正在运行的程序:
os.execl(sys.executable, sys.executable, *sys.argv)
与迄今为止的其他建议相比,它的一个优点是程序本身将被再次读取。
例如,如果您在另一个窗口中修改其代码,这将很有用。
解决方案 2:
使用 while 循环:
while True: # Re-run program
# main program
...
while True: # Validate user input
answer = input('Run again? (y/n): ')
if answer in ('y', 'n'):
break
print("invalid input.")
if answer == 'y':
continue
else:
print("Goodbye")
break
内部 while 循环一直循环,直到输入为'y'
或'n'
。
如果输入是'y'
,则外部 while 循环再次开始(continue
关键字跳过剩余代码并直接进入下一次迭代)。如果输入是'n'
,则外部 while 循环中断并且程序结束。
注意:我input()
在 Python 3 中使用。在 Python 2 中,使用raw_input()
。
解决方案 3:
使用一个 while 循环:
In [1]: start = 1
...:
...: while True:
...: if start != 1:
...: do_run = raw_input('Restart? y/n:')
...: if do_run == 'y':
...: pass
...: elif do_run == 'n':
...: break
...: else:
...: print 'Invalid input'
...: continue
...:
...: print 'Doing stuff!!!'
...:
...: if start == 1:
...: start = 0
...:
Doing stuff!!!
Restart? y/n:y
Doing stuff!!!
Restart? y/n:f
Invalid input
Restart? y/n:n
In [2]:
解决方案 4:
你可以用一个函数简单地做到这一点。例如:
def script():
# program code here...
restart = raw_input("Would you like to restart this program?")
if restart == "yes" or restart == "y":
script()
if restart == "n" or restart == "no":
print "Script terminating. Goodbye."
script()
当然,您可以在这里更改很多内容。所说的内容、脚本将接受的有效输入、变量和函数名称。您可以简单地将整个程序嵌套在用户定义的函数中(当然,您必须为里面的所有内容添加额外的缩进),并让它随时使用以下代码行重新启动:myfunctionname()
。有关更多信息,请点击此处。
解决方案 5:
这很容易做到
while True:
#do something
again = input("Run again? ")
if 'yes' in again:
continue
else:
print("Good Bye")
break
基本上,在此 while 循环中,程序会一次又一次地运行,因为 while 循环在条件成立时运行,True
因此我们已将条件设为真,并且如您所知,条件True
始终为真,永远不会为假。因此,不会停止,然后主要部分首先出现在这里,我们将从用户那里获取输入,无论他们是否要继续该程序,然后我们会说,如果用户说是,我想继续,那么关键字continue
将再次将循环带到顶部并再次运行程序,如果用户说了其他话,或者您可以用另一种方式执行此操作,如果您只想在用户说不时退出程序,那么只需添加此
elif 'no' in again:
print("Good Bye")
break
else:
print("Invalid Input")
这将检查输入中是否存在“否”字,如果存在,则将中断循环并且程序将退出
解决方案 6:
这是一个使用装饰器实现的有趣方法:
def restartable(func):
def wrapper(*args,**kwargs):
answer = 'y'
while answer == 'y':
func(*args,**kwargs)
while True:
answer = raw_input('Restart? y/n:')
if answer in ('y','n'):
break
else:
print "invalid answer"
return wrapper
@restartable
def main():
print "foo"
main()
最后,我认为你需要 2 个 while 循环。你需要一个循环将提示答案的部分括起来,这样如果用户输入错误,你可以再次提示。你需要第二个循环来检查当前答案是否为 ,'y'
并继续运行代码,直到答案不是'y'
。
- 2025年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)