如何根据用户输入重启程序?
我正在尝试根据用户输入来重启一个程序。
这段代码虽然不太好,但大概是我想要的样子:
answer = str(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)。有没有什么好主意?
6 个回答
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]:
48
这一行代码会毫无条件地从头开始重新启动正在运行的程序:
os.execl(sys.executable, sys.executable, *sys.argv)
它相比之前提到的其他建议,有一个好处就是程序本身会被重新读取。
这在你在另一个窗口修改代码时特别有用。
20
试试这个:
while True:
# main program
while True:
answer = str(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'
,程序就结束了。