如何在不阻塞的情况下通过按回车退出while循环?我该如何改进这种方法?
我最近在研究如何让用户按下回车键时退出一个循环,得出了以下代码:
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
来结束循环,而不需要设置一个标志位。