3

I'm currently making a math game where the user has 60 seconds to answer as many questions as possible. As of now, I have everything working except for the timer which should either count down to 0 or count up to 60 then stop the game. Right now, I have the timer set to time.clock() to count up to 60 and while the timer is less than that, the game will continue to run. For some reason however, the time.clock() isn't working as I expect it to. I also tried running two while loops at the same time which didn't work either. Anyone able to help me out here? Simply looking for a way to have a timer run in the background.

Here's my code:

    score = 0
    timer = time.clock()
    lives = 3

    while timer < 60 and lives > 0:
        if score >= 25:
            x = random.randint(-100,100)
            y = random.randint(-100,100)
            answer = int(raw_input("What is %d + %d? " % (x,y)))
            if answer == x + y:
                print "Correct!"
                score += 1
            else:
                print "Wrong!"
                lives -= 1
        elif score >= 20:
            x = random.randint(-75,75)
            y = random.randint(-75,75)
            answer = int(raw_input("What is %d + %d? " % (x,y)))
            if answer == x + y:
                print "Correct!"
                score += 1
            else:
                print "Wrong!"
                lives -= 1
        elif score >= 15:
            x = random.randint(-50,50)
            y = random.randint(-50,50)
            answer = int(raw_input("What is %d + %d? " % (x,y)))
            if answer == x + y:
                print "Correct!"
                score += 1
            else:
                print "Wrong!"
                lives -= 1
        elif score >= 10:
            x = random.randint(-25,25)
            y = random.randint(-25,25)
            answer = int(raw_input("What is %d + %d? " % (x,y)))
            if answer == x + y:
                print "Correct!"
                score += 1
            else:
                print "Wrong!"
                lives -= 1
        elif score >= 5:
            x = random.randint(-10,10)
            y = random.randint(-10,10)
            answer = int(raw_input("What is %d + %d? " % (x,y)))
            if answer == x + y:
                print "Correct!"
                score += 1
            else:
                print "Wrong!"
                lives -= 1
        elif score >= 0:
            x = random.randint(-5,5)
            y = random.randint(-5,5)
            answer = int(raw_input("What is %d + %d? " % (x,y)))
            if answer == x + y:
                print "Correct!"
                score += 1
            else:
                print "Wrong!"
                lives -= 1
    if lives == 0:
        print "Oh no! You ran out of lives! Your score was %d." % score
    elif timer == 60:
        print "Time's up! Your score is %d." % score
else:
    print "Goodbye!"
3

2 Answers 2

7

Use time.time(), it returns the epoch time (that is, the number of seconds since January 1, 1970 UNIX Time). You can compare it to a start time to get the number of seconds:

start = time.time()
while time.time() - start < 60:
    # stuff

You can have a timer pull you out of your code at any point (even if the user is inputting info) with signals but it is a little more complicated. One way is to use the signal library:

import signal
def timeout_handler(signal, frame):
    raise Exception('Time is up!')
signal.signal(signal.SIGALRM, timeout_handler)

this defines a function that raises an exception and is called when the timeout occurs. Now you can put your while loop in a try catch block and set the timer:

signal.alarm(60)
try:
    while lives > 0
        # stuff
except:
    # print score
Sign up to request clarification or add additional context in comments.

3 Comments

So set timer = time.time() and change my while loop to: while time.time() - timer < 60 and lives > 0?
It worked! Thanks Mike. Another problem arose however. Now, the game won't quit if theres a question in the command line regardless of the time being > 60. The game quits only after the question is answered. Is there a way to stop the game immediately?
Yes, you can interrupt other processes, but it is a bit more complicated, see above.
1

An easiar way would be to create a variable for how long the timer should run for. Here is an example

2 Comments

Instead of using an image, copy and paste the code instead
I just thought it would be easier

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.