Guess a number: Difference between revisions

From Computer Science Wiki
 
(11 intermediate revisions by 2 users not shown)
Line 6: Line 6:
== What is this problem set trying to do ==
== What is this problem set trying to do ==


You have to think about [[conditions]] and [[computational thinking]] here. You are also going to be incrementing variables.
You have to think about [[conditionals]] and [[computational thinking]] here. You are also going to be incrementing variables.


== The Problem ==
== The Problem ==
Line 12: Line 12:
Please write a simple game that randomly selects a number between 0 and 100. A player must guess the number. Your program should tell the player if their guess is higher or lower than the secret number.  
Please write a simple game that randomly selects a number between 0 and 100. A player must guess the number. Your program should tell the player if their guess is higher or lower than the secret number.  


# Your program must generate a random number between 0 and 100 and assign that random number to a variable.  
# Your program must generate a [https://www.programiz.com/python-programming/examples/random-number random number] between 0 and 100 and assign that random number to a variable.  
# Your program must ask the player to guess a number
# Your program must ask the player to guess a number
# Your program must compare the players guess and the secret number. The program should tell the player if their guess is higher or lower than the secret number
# Your program must compare the players guess and the secret number. The program should tell the player if their guess is higher or lower than the secret number
Line 18: Line 18:
# Your program must ask the player if they want to play again
# Your program must ask the player if they want to play again


== Some Code to Get You Started ==
== Some Python code to get you started ==


This code will not run. If you see  <code>...</code> I have left out code, and you have to figure out what to put in.  
This code will not run. If you see  <code>...</code> I have left out code, and you have to figure out what to put in.  


<syntaxhighlight lang="python">
<syntaxhighlight lang="python" line="yes">


import random
import random
Line 36: Line 36:
...
...
        
        
         play_again = raw_input("Do you want to play again? ")
         play_again = input("Do you want to play again? ")
         if play_again == "y" or play_again == "Y" or play_again == "yes":
         if play_again == "y" or play_again == "Y" or play_again == "yes":
             guess = 0
             guess = 0
Line 49: Line 49:
# add in a condition that players only have a certain number of turns to win
# add in a condition that players only have a certain number of turns to win
# add in a difficulty level; easy, medium and expert. If a player has easy, they have 8 tries, medium, they have only 4 tries, and expert, only 2 tries!!
# add in a difficulty level; easy, medium and expert. If a player has easy, they have 8 tries, medium, they have only 4 tries, and expert, only 2 tries!!
# you can tell a player if their guess is "a little to high or a little to low" or you can say "your guess is way to high or way to low"


== How you will be assessed ==
== How you will be assessed ==
Line 58: Line 59:
<references />
<references />


== A few different possible solutions ==
== A possible solution ==




Line 66: Line 67:
<syntaxhighlight lang="python" >
<syntaxhighlight lang="python" >


list=[2,3,3,2,3,2,3,9,7,3,4,8,1,2,8,7,6,5,8,9,1,2,3,2,1,4,3,2,1,4,5,4,1,6,9,6,1,4,2,3,5]
#Finished on 4/10/18
 
#Can catch errors and let users input again
def mean(list):
#Author: Filip
    answer = sum(list) 
import random
    mean = answer / len(list)
secret_number = random.randint(1, 100)
    return mean
counter = 0
 
def mode(list):
    frequency = {}
    highest = max(list)
    lowest = min(list)
    # in this loop, we simply update our dictionary named "frequency with the count of values.
    for i in range(lowest,highest+1):
        frequency.update({i:list.count(i)})
    values = frequency.values()
    keys = frequency.keys()
    mode = keys[values.index(max(values))]
    return mode


def median(list):
while True:
     new_list = sorted(list)
    try:
     if len(new_list) % 2 == 1:
        difficulty_level = int(input("What level difficultly level do you want(1-easiest 5-impossible): "))
         median = new_list[len(list)/2]
        if difficulty_level < 1 or difficulty_level > 5:
    return median
            raise NameError()
 
     except ValueError:
print("the mean of list is: " + str(mean(list)))
        print("ERROR: You can only input numbers!")
print("the median of list is: " + str(median(list)))
        continue
print("the mode of list is: " + str(mode(list)))
     except NameError:
        print("ERROR: Please input a number between 1 and 5.")
        continue
    else:
        if difficulty_level == 1:
            turns_left = 15
         elif difficulty_level == 2:
            turns_left = 12
        elif difficulty_level == 3:
            turns_left = 10
        elif difficulty_level == 4:
            turns_left = 7
        elif difficulty_level == 5:
            turns_left = 5
       
        while counter<turns_left:
            try:
                user_guess = int(input("What do you think the number is (1-100): "))
            except ValueError:
                print("ERROR: You can only input numbers!")
            else:
                if user_guess<101 and user_guess > 0:
                    if user_guess>secret_number:
                        counter += 1
                        if user_guess-secret_number <4:
                            print("GUESS A LITTLE LOWER")
                        else:
                            print("GUESS LOWER")
                    elif user_guess<secret_number:
                        counter += 1
                        if secret_number-user_guess <4:
                            print("GUESS A LITTLE HIGHER")
                        else:
                            print("GUESS HIGHER")
                    else:
                        counter += 1
                        print("Good job!! It took you " + str(counter) + " tries.")
                        break
                else:
                    print("ERROR: Your number has to be between 1 and 100!")
        if counter>=turns_left:
            print("GAME OVER: You ran out of turns")
    break


</syntaxhighlight>
</syntaxhighlight>


The example below includes standard deviation and a bar graph.
<syntaxhighlight lang="python" >
import matplotlib.pyplot as plt
list =[2,3,3,2,3,2,3,9,7,3,4,8,1,2,8,7,6,5,8,9,1,2,3,2,1,4,3,2,1,4,5,4,1,6,9,6,1,4,2,3,5,5]
numbers = [1,2,3,4]
def graph(graph_list):
    count = [1]
    sorted_list = sorted(graph_list)
    highest = max(sorted_list)
    lowest = min(sorted_list)
    for i in range(lowest,highest+1):
        count.append(i)
    plt.hist(sorted_list, bins=count)
    plt.ylabel('Occurences')
    plt.xlabel('Number')
    plt.show()
 
def mean(mean_list):
    mean = sum(numbers)/len(numbers) 
    return mean
def mode(mode_list):
    frequency = []
    count = []
    sorted_list = sorted(mode_list)
    highest = max(sorted_list)
    lowest = min(sorted_list)
    for i in range(lowest,highest+1):
        frequency.append(sorted_list.count(i))
        count.append(i)
    highest_frequency = max(frequency)
    index_count = frequency.index(highest_frequency)
    mode = count[index_count]
    return mode
def median(median_list):
  sorted_list = sorted(median_list)
  if len(sorted_list)%2 ==1:
    index = len(sorted_list)/2
    median = sorted_list[index]
  else:
      index_1 = len(sorted_list)/2
      index_2 = len(sorted_list)/2 - 1
      median = []
      median.append(sorted_list[index_1])
      median.append(sorted_list[index_2])
      median = mean(median)
      print("The median is rounded up")         
  return median
def standev(stdev_list):
    mean_list = []
    mean_num = mean(stdev_list)
    for i in range (0,len(stdev_list)):
        mean_list.append(stdev_list[i]-mean_num)
    mean_difference = mean(mean_list)
    stdev = mean_difference**1/2
    return stdev
 
# your program must return the correct answers for the questions below:
print("the mean of list is: " + str(mean(numbers)))
print("the median of list is: " + str(median(numbers)))
print("the mode of list is: " + str(mode(numbers)))
print("the standard deviation of list is: " + str(standev(numbers)))
graph(numbers)
</syntaxhighlight>
The code below approaches mode differently than the two examples above (which use a dictionary).
<syntaxhighlight lang="python" >
list=[2,3,3,2,3,2,3,9,7,3,4,8,1,2,8,7,6,5,8,9,1,2,3,2,1,4,3,2,1,4,5,4,1,6,9,6,1,4,2,3,5]
def mean(list):
    mean = sum(list)/len(list) 
    return mean
def median(list):
    new_list = sorted(list)
    median = new_list[len(new_list)/2]
    return median
 
def mode(list):
    current_top = 0
    highest = max(list)
    lowest = min(list)
    for i in range(lowest,highest+1):
        new_possible_top = list.count(i)
        if new_possible_top > current_top:
            current_top = new_possible_top
            mode = i
    return mode
 
# your program must return the correct answers for the questions below:
print("the mean of list is: " + str(mean(list)))
print("the median of list is: " + str(median(list)))
print("the mode of list is: " + str(mode(list)))
</syntaxhighlight>
</div>
</div>
</div>
</div>


[[Category:problem set]]
[[Category:problem set]]
[[Category:python]]
[[Category:python]]
[[Category:strings]]
[[Category:strings]]
[[Category:math]]

Latest revision as of 09:30, 27 August 2020

This a problem set for you to work through [1]

This is a problem set. Some of these are easy, others are far more difficult. The purpose of these problems sets are to HELP YOU THINK THROUGH problems. The solution is at the bottom of this page, but please don't look at it until you have tried (and failed) at least three or four times.


What is this problem set trying to do[edit]

You have to think about conditionals and computational thinking here. You are also going to be incrementing variables.

The Problem[edit]

Please write a simple game that randomly selects a number between 0 and 100. A player must guess the number. Your program should tell the player if their guess is higher or lower than the secret number.

  1. Your program must generate a random number between 0 and 100 and assign that random number to a variable.
  2. Your program must ask the player to guess a number
  3. Your program must compare the players guess and the secret number. The program should tell the player if their guess is higher or lower than the secret number
  4. Your program must tell the player if they have won
  5. Your program must ask the player if they want to play again

Some Python code to get you started[edit]

This code will not run. If you see ... I have left out code, and you have to figure out what to put in.

import random
secret_number = ...
guess = 0
game = 1
  
    print("This is guess: " + str(guess))
    print("This is game:" + str(game))
    player_guess = input("Please make a guess: ")
    guess = guess +1
   
...
       
        play_again = input("Do you want to play again? ")
        if play_again == "y" or play_again == "Y" or play_again == "yes":
            guess = 0
            game = game + 1
        break
 ....

Take This Further[edit]

  1. add in a condition that players only have a certain number of turns to win
  2. add in a difficulty level; easy, medium and expert. If a player has easy, they have 8 tries, medium, they have only 4 tries, and expert, only 2 tries!!
  3. you can tell a player if their guess is "a little to high or a little to low" or you can say "your guess is way to high or way to low"

How you will be assessed[edit]

Every problem set is a formative assignment. Please click here to see how you will be graded

References[edit]

A possible solution[edit]

Click the expand link to see one possible solution, but NOT before you have tried and failed!

#Finished on 4/10/18
#Can catch errors and let users input again
#Author: Filip
import random
secret_number = random.randint(1, 100)
counter = 0

while True:
    try:
        difficulty_level = int(input("What level difficultly level do you want(1-easiest 5-impossible): "))
        if difficulty_level < 1 or difficulty_level > 5:
            raise NameError()
    except ValueError:
        print("ERROR: You can only input numbers!")
        continue
    except NameError:
        print("ERROR: Please input a number between 1 and 5.")
        continue
    else:
        if difficulty_level == 1:
            turns_left = 15
        elif difficulty_level == 2:
            turns_left = 12
        elif difficulty_level == 3:
            turns_left = 10
        elif difficulty_level == 4:
            turns_left = 7
        elif difficulty_level == 5:
            turns_left = 5
        
        while counter<turns_left:
            try:
                user_guess = int(input("What do you think the number is (1-100): "))
            except ValueError:
                print("ERROR: You can only input numbers!")
            else:
                if user_guess<101 and user_guess > 0:
                    if user_guess>secret_number:
                        counter += 1
                        if user_guess-secret_number <4:
                            print("GUESS A LITTLE LOWER") 
                        else:
                            print("GUESS LOWER")
                    elif user_guess<secret_number:
                        counter += 1
                        if secret_number-user_guess <4:
                            print("GUESS A LITTLE HIGHER")
                        else:
                            print("GUESS HIGHER")
                    else:
                        counter += 1
                        print("Good job!! It took you " + str(counter) + " tries.")
                        break
                else:
                    print("ERROR: Your number has to be between 1 and 100!")
        if counter>=turns_left:
            print("GAME OVER: You ran out of turns")
    break