lundi 25 juillet 2016

Code feedback for python guessing game

I am new to Python (and coding in general) and after about a week of reading "Thinking Like a Computer Scientist: Learning with Python" I decided to try and build a version the classic "guessing game". I added some extra features such as counting the number of guesses the user takes, and playing against a simulated "computer" player to make the program slightly more interesting. Also, the number of guesses the computer takes is based on the mean number of guesses needed to guess a number in a given range (which is logarithmic of base 2 for range n) and varies according to standard deviation. Any feedback on the structure of my code or the way I generate the number of guesses the computer takes would be much appreciated!!!

Anywayyysss.... here is my code

import random


def get_number(level):                  #selects a random number in range depending on difficulty selected
    if level == "e":
        number = random.randint(1,20)
    if level == "m":
        number = random.randint(1,100)
    if level == "h":
        number = random.randint(1,1000)
    elif level != "e" and level != "m" and level != "h":
        print ("Invalid input!")
        get_number()
    return number


def select_level():                   #prompts the user to select a difficulty to play on
    level = str(input("Would you like to play on easy, medium, or hard? \n"
                      "Type 'e' for easy, 'm' for medium, or 'h' for hard!\n"))
    return level


def guess_number(level):        #function that prompts the user to guess within range depending on chosen difficulty
    if level == "e":
        guess = int(input("Guess a number between 1 and 20:\n"))
    if level == "m":
        guess = int(input("Guess a number between 1 and 100:\n"))
    if level == "h":
        guess = int(input("Guess a number between 1 and 1000:\n"))
    return guess


def check_guess(guess,number):         #processes the users guess and evaluates if it is too high, too low, or bang on
    if guess > number:
        print ("your guess is too high! Try again! \n")
    if guess < number:
        print ("your guess is too low! Try again! \n")
    if guess == number:
        print("\n{0} was the number!".format(number))


def com_num_guesses(level):          #function to get the number of guesses taken by the computer
    if level == "e":
        com_guesses = round(random.normalvariate(3.7,1.1))
    if level == "m":
        com_guesses = round(random.normalvariate(5.8,1.319))
    if level == "h":
        com_guesses = round(random.normalvariate(8.99,1.37474))
    print("The computer guessed the number in {0} guesses! Can you beat that?".format(com_guesses))
    return com_guesses


def mainloop():
    level = select_level()
    number = get_number(level)
    com_guesses = com_num_guesses(level)
    guess = guess_number(level)
    check_guess(guess,number)
    num_guesses = 1
    if guess == number:           #tells program what to do if first guess is correct
        print("You got it in {0} guesses.".format(num_guesses))
        if num_guesses == com_guesses:
            print("It took the computer {0} guesses too!\nIt's a tie!\n".format(com_guesses))
        if num_guesses > com_guesses:
            print("It took the computer {0} guesses.\nThe computer wins!\n".format((com_guesses)))
        if num_guesses < com_guesses:
            print("It took the computer {0} guesses.\nYou win!\n".format(com_guesses))
        play_again = str(input("To play again type 'yes'. To exit type 'no'. \n"))
        if play_again == "yes":
            mainloop()
        if play_again == "no":
            raise SystemExit(0)
    while True:                 #tells program how to handle guesses after the first guess
        guess2 = guess_number(level)
        check_guess(guess2,number)
        num_guesses += 1
        if guess2== number:
            print( "You got it in {0} guesses.".format(num_guesses))
            if num_guesses == com_guesses:
                print("It took the computer {0} guesses too!\nIt's a tie!\n".format(com_guesses))
            if num_guesses > com_guesses:
                print("It took the computer {0} guesses.\nThe computer wins!\n".format((com_guesses)))
            if num_guesses < com_guesses:
                print("It took the computer {0} guesses.\nYou win!\n".format(com_guesses))
            play_again = str(input("To play again type 'yes'. To exit type 'no'. \n"))
            if play_again == "yes":
                mainloop()
            if play_again == "no":
                raise SystemExit(0)
            break





mainloop()




Aucun commentaire:

Enregistrer un commentaire