如何根据用户输入重启程序?

24 投票
6 回答
352187 浏览
提问于 2025-04-17 16:04

我正在尝试根据用户输入来重启一个程序。

这段代码虽然不太好,但大概是我想要的样子:

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',程序就结束了。

撰写回答