<p><code>msvcrt.getch()</code>是阻塞的,因此您实际上不测量用户按键所用的时间。for循环在用户按下后开始。
另外,<code>time.sleep()</code>是阻塞的,因此用户将不得不等待睡眠时间,即使他已经按下了键。你知道吗</p>
<p>要解决第一个问题,您可以使用<code>msvcrt.kbhit()</code>检查用户是否按了某个键,并且仅当用户按了某个键时才调用<code>msvcrt.getch()</code>。这样<code>msvcrt.getch()</code>将在您调用它之后立即返回。你知道吗</p>
<p>要解决第二个问题,只需使用<code>time.time()</code>获取循环的开始时间,并将其与循环中的当前时间进行比较。您还可以打印循环中经过的时间。你知道吗</p>
<p>以下是最终代码(还有一些额外的命名和格式更改):</p>
<pre><code>import string
import random
import msvcrt
import time
MAX_TIME = 2
def get_random_char():
return random.choice(string.ascii_lowercase)
def get_user_char():
return msvcrt.getch().decode('utf-8')
print("\nWelcome to Key Pop It!")
option = input("\n Press 1 to play OR\n Press 2 for instructions\n")
if option == "1":
score=0
while True:
char = get_random_char()
print("\n" + char)
start_time = time.time()
while not msvcrt.kbhit():
seconds_passed = time.time() - start_time
print("seconds passed: {0:.1f}".format(seconds_passed), end="\r")
if seconds_passed >= MAX_TIME:
key = None
break
else:
key = get_user_char()
if key != char:
break
score = score + 1
print("\nsu record fue de, ", score)
elif option == "2":
print("""
Welcome to key pop it!
The game is simple, the machine is going to generate a random
letter and you have to press it on your keyboard, if you take too
long or press the wrong letter, you will lose.""")
else:
print("Invalid option!")
</code></pre>