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

2024-04-16 11:43:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用基于用户输入的if测试重新启动程序。

这段代码不起作用,但它大概是我想要的:

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除外)。有什么想法吗?


Tags: run代码用户answer程序内容inputraw
3条回答

这一行将无条件从头开始重新启动正在运行的程序:

os.execl(sys.executable, sys.executable, *sys.argv)

与目前剩下的建议相比,它的一个优点是程序本身将被再次读取。

例如,如果要在另一个窗口中修改其代码,则这可能很有用。

试试这个:

while True:
    # main program
    while True:
        answer = raw_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',则程序结束。

还要注意,将raw_input转换为str()是多余的,因为raw_input已经返回一个字符串。

使用一个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]:

相关问题 更多 >