Python computing quiz
Just some general syntax notes I have after a quick scan of your code...

Python isn't C, not all evaluations are about equality!

The line while playing == True:, immediately struck me as odd.  Python evaluates things in if-statements/while-loops/etc.  This is different to a language such as C, which always uses equality (or inequality) for such things.

Specifically, if we take the variable playing to just be (something that is either True or False), and then substitute that into the expression.. We get:

(something that is either True or False) == True


This will *ALWAYS* evaluate to the same value as just using playing - since it's already either True or False.



Input checking, and why (when dealing with users) even sane people validate

The following excerpt:


#gets the number of questions the player wants to answer
num = int(input("\nHow many questions would you like: "))



As you've discovered, input is returning you a string, and the way to cast this to an int is with (the appropriately named) int.  However, if a user enters something like "Tersosaur" instead of a number, you will get a ValueError (raised by int).

The way to deal with this is to use a try/except, like this:

#gets the number of questions the player wants to answer
num = input("\nHow many questions would you like: ")
try:
    num = int(num)
except ValueError:
    print "Error '%s' is not a valid number".format(num)




Just a recommendation,  Make your code more Pythonic

I noticed a lot (all) of your initialization and start-up code (things such as setting score = 0, etc) happens in the program itself, and not in a main block.

You don't technically need this, but it is best practise to use a block like this:

if __name__ == "__main__":
    ...initialization code goes here




Functional Decomposition is your frenemy friend

Functional Decomposition is important, even in small program like this.  It improves the readability, understandability and (perhaps most importantly here) maintainability of your code.

At the moment, all of your logic is wrapped up inside this mainloop style sequence of commands.  The way you get input from the user, the way you keep score, how you check if their answers are correct, etc.  All of these ways and hows are behaviours, which in Python can* become methods.

* Note: Functional Decomposition is not ALWAYS your friend (hence frenemy).  If you go to far you'll end up with just as big a mess of spaghetti code as you started with.  For example, don't extract each and every line from your loop into a separate function and think it's functionally decomposed.  Functional decomposition is about the identification of behaviours.