如何使用我无法等待回答的输入进行while循环? (Python 3.6 Windows 10)
例如:
b = 0
While True:
b += 1
a = input('wating',b)
if a == '1': print('Great!')
time.sleep(1)
这将打印:
1
2
3
4
# But if a write 1 then it would print
5
Great!
嗯,这只是我想要做的一个例子,事实上我想做一个简单游戏的while循环菜单(简单因为它是一个shell游戏,没有图形),当你在菜单,每秒(即使你没有做任何事情)游戏检查你是否写了一些东西(输入)和(即使你在输入中写或不写东西)检查你的统计数据(减少你的食物和增加你当前的生命值)。
对不起我的英文,感谢您的阅读。
编辑:
我在stackoverflow中发现了这两个方法,它们哪个更好?我不理解他们中的任何一个,有人可以解释他们的工作以及他们之间有什么不同吗? (#comments我不能制作它们)
的第一
import msvcrt
import time
import sys
class TimeoutExpired(Exception):
pass
answer = ''
def input_with_timeout(prompt, timeout, timer=time.monotonic):
sys.stdout.write(prompt)
sys.stdout.flush()
endtime = timer() + timeout
result = []
while timer() < endtime:
if msvcrt.kbhit():
result.append(msvcrt.getwche()) #XXX can it block on multibyte characters?
if result[-1] == '\n': #XXX check what Windows returns here
return ''.join(result[:-1])
time.sleep(0.04) # just to yield to other processes/threads
raise TimeoutExpired
try:
answer = input_with_timeout('hi', 4)
except TimeoutExpired:
print('Sorry, times up')
else:
print('Got %r' % answer)
第二
import sys
import time
import msvcrt
def readInput( caption, default, timeout = 2):
start_time = time.time()
sys.stdout.write('%s(%s):'%(caption, default))
sys.stdout.flush()
input = ''
while True:
if msvcrt.kbhit():
byte_arr = msvcrt.getche()
if ord(byte_arr) == 13: # enter_key
break
elif ord(byte_arr) >= 32: #space_char
input += "".join(map(chr,byte_arr))
if len(input) == 0 and (time.time() - start_time) > timeout:
print("timing out, using default value.")
break
print('') # needed to move to next line
if len(input) > 0:
return input
else:
return default
# and some examples of usage
ans = readInput('Please type a name', 'john')
print( 'The name is %s' % ans)
答案 0 :(得分:0)
基于this answers我刚刚发现了一种方法来解决这个问题:
import msvcrt
while True:
if msvcrt.kbhit():
my_input = input()
msvcrt提供了能够处理关键输入的函数列表。 msvcrt.kbhit()
检查按键是否被按下并等待读取并返回true或false,在按下按键后循环&#34;停止&#34;直到输入完成,但在此之后循环保持&#34;循环&#34;没有停止(直到再次按下一个键)。