Jan-27-2019, 09:02 AM
Just thinking aloud: I need to know only winner, because logically another is looser. There are only three winning combinations (below, list of tuples, winner is first looser is second), all other combinations are either loosing or draw.
One idea to improve clarity is to move user input validation into separate function. Something like this:
>>> first_wins = [('Rock', 'Scissors'), ('Paper', 'Rock'), ('Scissors', 'Paper')]Comparison to determine winner could therefore be:
>>> if user_choice == computer_choice: ... # draw ... elif (user_choice, computers_choice) in first_wins: ... # user wins ... else: ... # computer wins
One idea to improve clarity is to move user input validation into separate function. Something like this:
def validate_input(question): """Validate input to the question.""" allowed = ['paper', 'scissors', 'rock', 'quit'] while True: answer = input(question).lower() if answer in allowed: return answer else: print((f'Expected one from: {", ".join(allowed)} ' f'but your input was {answer}')) user_choice = validate_input('Enter your choice, one from: paper, scissors, rock, quit ')This enables to separate what is done from how it is done and code is (subjectively) more readable:
while True: user_choice = validate_input('Enter your choice, one from: paper, scissors, rock, quit ') if user_choice == 'quit': break computer_choice = random.choice([pair[0] for pair in first_wins]) if user_choice == computer_choice: # draw elif (user_choice, computer_choice) in first_wins: # user wins else: # computer wins
I'm not 'in'-sane. Indeed, I am so far 'out' of sane that you appear a tiny blip on the distant coast of sanity. Bucky Katt, Get Fuzzy
Da Bishop: There's a dead bishop on the landing. I don't know who keeps bringing them in here. ....but society is to blame.
Da Bishop: There's a dead bishop on the landing. I don't know who keeps bringing them in here. ....but society is to blame.