这个程序会询问用户问题,但只给他/她10秒的时间回答每个问题。如果他们在时间限制内回答问题,程序会立即转到下一个问题。另外,如果他们没有在时间限制内回答,程序将在10秒后跳到下一个问题。我知道timer类,如何集成它来实现这一点?这是我目前掌握的代码。别担心pmXXXXX的东西,这是我在学校项目中使用的软件。在
#question1
one = raw_input("Question 1:" + "\n" + qa + "\n" + "x" + "\n" + "A. Brightens it" + "\n" + "B. A gradient of black to white." + "\n" + "C. A color pallete.")
if(one.lower() == "b"):
print "Congrats! 10 points."
pmNewComputedImage("Question 1 Answer", 256, 256, "x")
score += 10
else:
print "Wrong. -10 points. Here's the answer."
window1 = pmNewComputedImage("Question 1 Answer", 256, 256, "x")
score -= 10
#question2
pmNewComputedImage("Question 2", 256, 256, "x*2")
two = raw_input("Question 2:" + "\n" + qb + "\n" + "A. x/2" + "\n" + "B. y/2" + "\n" + "C. x*2")
if (two.lower() == "c"):
print "Congrats! 10 points."
score += 10
else:
print "Wrong -10 points. The answer is C."
score -= 10
def stopwatch(seconds):
import time
start = time.time()
time.clock()
elapsed = 0
while elapsed < seconds:
elapsed = time.time() - start
print "Seconds count: %02d" % elapsed
time.sleep(1)
raw_input
函数只是在用户键入内容之前不会返回,因此不能直接执行此操作。在有多种方法可以解决这个问题。您可以在后台线程中运行计时器,并使用信号中断主线程;您只需使用
signal.alarm
自动执行,甚至不需要后台线程(但在Windows上不需要);您可以将sys.stdin
置于非阻塞模式,并使用较低级别的I/O来读取,而不是raw_input
;您可以在子进程中执行输入,并在需要太长时间时终止它,等等下面是第一版的一个例子,它甚至可以在Windows上运行,但我不能保证它在实践中会起作用:
我不确定} 安装自己的处理程序。阅读链接的文档,自己测试一下。如果必须安装信号处理程序,那么最好使用其他可用的跨平台信号之一而不是
CTRL_C_EVENT
是否真的在Windows上引发KeyboardInterrupt
;您可能需要用^{CTRL_C_EVENT
,并引发您自己的自定义异常,而不是KeyboardInterrupt
。在相关问题 更多 >
编程相关推荐