playchoice == ('no' or 'No')would it have worked?
'no' or 'No'return?
>>> 'no' or 'No' 'no'
>>> 'yes' == ('no' or 'No') False
>>> if 'no': ... print('it evaluated as true')
>>> False or 'no'
'no'will be returned because it was the first "true" thing in the or statement
>>> bool('no') True
Truein logical expressions. Whereas empty strings will evaluate to
>>> bool('') False
Just realized raw_input() returns a string, so is_space_free() won't work in its current form unless the player's input is converted to an int first. I think it would make more sense to do the conversion and check validity within get_player_move() rather than is_space_free(), since get_player_move() is the only one of the group that has to directly deal with player input.
How's this look? int() will raise a ValueError exception for any string that isn't strictly numeric AFAIK (no decimal points allowed), except when + or - is used as a prefix, which doesn't seem like a big deal.
while True: try: space = int(raw_input("Choose a space...\n")) except ValueError: print 'Please enter an integer between 1 and 9, inclusive.\n' else: if space < 1 or space > 9: print 'Please enter an integer between 1 and 9, inclusive.\n' elif is_space_free(board, space - 1): # is_space_free counts from 0 break else: print 'That space is occupied.\n'