如何在不阻塞的情况下通过按回车退出while循环?我该如何改进这种方法?

6 投票
1 回答
8844 浏览
提问于 2025-04-17 22:13

我最近在研究如何让用户按下回车键时退出一个循环,得出了以下代码:

import sys, select, os

switch = 1
i = 1
while switch == 1:
    os.system('cls' if os.name == 'nt' else 'clear')
    print "I'm doing stuff. Press Enter to stop me!"
    print i
    while sys.stdin in select.select([sys.stdin], [], [], 0)[0]:
        line = raw_input()
        if not line:
            print "Finished! =]"
            switch = 0
        else:
            print "Finished! =]"
            switch = 0
    i = i+1

有没有办法让这段代码看起来更整洁一些?特别是“if not line”和后面的“else”看起来有点乱。它们能不能合并成一个?有没有比“switch”更好的选择?

最开始的时候,如果我输入了一堆字符然后按下回车,循环并不会停止。我需要再按一次回车。这里的if not和else部分是为了让它在第一次按下回车时就能退出循环。

1 个回答

12

这个方法对我有效:

import sys, select, os

i = 0
while True:
    os.system('cls' if os.name == 'nt' else 'clear')
    print "I'm doing stuff. Press Enter to stop me!"
    print i
    if sys.stdin in select.select([sys.stdin], [], [], 0)[0]:
        line = raw_input()
        break
    i += 1

你只需要检查一次标准输入(stdin),因为第一次输入就会结束循环。如果你对“条件行/非条件行”的结果有用,可以把它们合并成一个条件判断。这样,你只用一个 while 循环,就可以用 break 来结束循环,而不需要设置一个标志位。

撰写回答