嘿伙计们我正在用python做一个程序。这是一个计算程序,它给你两个从2到10的随机数,然后询问你有多少是2 * 4.
如果你的答案是正确的,它会给你一个观点。现在,我希望程序允许用户计算20秒,当20秒结束时,它会显示你有多少积分。
到目前为止我的代码 - >
__author__ = 'Majky'
import random
import time
a = random.randint(2, 10)
b = random.randint(2, 10)
print("How much is", a, "times", b)
t = 0
odg = int(input("Answer ?"))
sec = 0
while sec < 20:
if odg == a * b:
print("Correct")
t = +1
print("Incorrect")
print("Your points are", t)
答案 0 :(得分:0)
您可以使用time.sleep(20)
功能等待20秒。
此函数暂停执行指定的秒数。参数可以是浮点数,以指示更精确的睡眠时间。
实际的暂停时间可能小于请求的时间,因为任何捕获的信号将在执行该信号的捕获例程后终止sleep()
。此外,由于系统中其他活动的安排,暂停时间可能比任意数量的请求时间长。
答案 1 :(得分:0)
你将要使用threading,并打开一个计算该时间的并行线程(可能通过使用time.sleep())并返回一次,一旦返回,主线程将停止执行并返回结果。
在主程序中使用sleep()将暂停执行该时间,这不是我想要的。您希望用户能够在计时器运行时与程序进行交互。这就是使用线程模块中的线程的原因。
以下是使用线程的快速示例(如果您需要任何特定的话,请调整它):
import random
import time
def main():
thread_stop = threading.Event()
thread = threading.Thread(target=user_thread, args=(2, thread_stop))
time.sleep(20)
thread_stop.set()
def user_thread(arg1, stop_event):
t = 0
while(not stop_event.is_set()):
a = random.randint(2, 10)
b = random.randint(2, 10)
print("How much is", a, "times", b)
odg = int(input("Answer ?"))
if odg == a * b:
print("Correct")
t += 1
else:
print("Incorrect")
print("Your points are", t)
main()
这里还有一个使用信号的例子,如果20秒结束并且计算结果,则会在回答中间停止用户。此示例使用信号,这本身就是一个控制执行流程的有趣模块,您应该在有机会时检查其文档。
我也意识到你的代码中有另一个错误,我忽略了,现在在两个例子中都得到纠正,当你想增加“t”时,使用“t + = 1”,因为“t = + 1”是不正确,最后一个表达式只是每次都将“正”分配给t,所以不会增加。干杯!
import signal
t = 0
#Here we register a handler for timeout
def handler(signum, frame):
#print "Time is up!"
raise Exception("Time is up.")
#function to execute your logic where questions are asked
def looped_questions():
import random
global t
while 1:
#Here is the logic for the questions
a = random.randint(2, 10)
b = random.randint(2, 10)
print("How much is", a, "times", b)
odg = int(input("Answer ?"))
if odg == a * b:
t += 1
print("Correct")
else:
print("Incorrect")
#Register the signal handler
signal.signal(signal.SIGALRM, handler)
#Set the timeout
signal.alarm(20)
try:
looped_questions()
except Exception, exc:
print exc
#Here goes the results logic
print("Your points are", t)
此外,不要忘记添加到健全性检查,以便无效的用户输入不会破坏您的代码。我会把它留给你;)
答案 2 :(得分:0)
您可以使用time.time()
执行此类操作。
import time
...
start = time.time()
answer = raw_input('enter solution')
finish = time.time()
if finish - start > 20:
#failure condition
else:
#success condition