Hi there one and all. I am attempting to learn to code in python with the intention of teaching it to a class of 12 year olds later in the year!!! So far I've been going ok if a little slowly, however this one is stumping me. I am trying to get the 'Computer' to guess my number as a variation of the standard 'Guess my number game' and just cannot get it to work.

I wonder if someone could run an expert eye over my code below and give me any pointers on how to get it working as I am starting to go a little mad. Thank you in advance.

Pawel.

# CPU Guess My Number
#
# You pick a random number between 1 and 100
# The computer tries to guess it in the fewest attempts
# automatically saying if the number is too high or low
# or right on the money
#
# Pawel Aftanas 26/04/12

import random

print "\tWelcome to 'CPU Guess My Number'!"
print "\nI will think of a number between 1 and 100."
print "The CPU will try and guess the number in the fewest attempts possible.\n"

# Human to enter a number for the CPU to guess

the_number = int(raw_input("Enter a number between 1 and 100: "))

# Computer guesses the number using the random function

guess = random.randrange(1,101)
tries = 1

while True:
    guess != the_number:
    tries += 1
    if guess > the_number:
        print "You chose", guess, "but my number is lower..."
        guess = random.randint(1, guess+1)
    elif guess < the_number:
        print "You chose", guess, "but my number is higher..."
        guess = random.randint(guess-1 ,101)
    else:
        print "\n\n\t\t\tThat's Right!"
        print "\t\t\tthe number was", the_number,"..."
        print "\t\t...and it only took", tries,"tries!\n"
        break

# Count down sequence

    if tries == 8:
        print "You have had 8 goes only 2 left!"
    elif tries == 9:
        print "Only one more chance..."
    else:
        print "Bad luck after 10 attempts you still haven't guessed my number."
        break

raw_input ("\n\nPress enter key to exit.")

Recommended Answers

Usual way to guess optimally is to guess average of low guess (initially 0) and high guess (initially 101).

Jump to Post

All 4 Replies

Usual way to guess optimally is to guess average of low guess (initially 0) and high guess (initially 101).

Right I have started to get somewhere, but still not quite right, the code is not allowing the computer to narrow its choices down any help would be appreciated. Thanks again.

# CPU Guess My Number
#
# You pick a random number between 1 and 100
# The computer tries to guess it in the fewest attempts
# automatically saying if the number is too high or low
# or right on the money
#
# Pawel Aftanas 26/04/12

import random

print "\tWelcome to 'CPU Guess My Number'!"
print "\nI will think of a number between 1 and 100."
print "The CPU will try and guess the number in the fewest attempts possible.\n"

# Human to enter a number for the CPU to guess

the_number = int(raw_input("Enter a number between 1 and 100: "))

# Computer guesses the number using the random function

guess = random.randrange(1,101)
tries = 0

# The code is working but it is not narrowing down the choices.
while True:
    guess != the_number
    tries += 1
    if guess > the_number:
        print "You chose", guess, "but my number is lower..."
        guess = random.randint(1, guess + 1)
    elif guess < the_number:
        print "You chose", guess, "but my number is higher..."
        guess = random.randint(guess - 1 ,101)
    else:
        print "\n\n\t\t\tThat's Right!"
        print "\t\t\tthe number was", the_number,"..."
        print "\t\t...and it only took", tries,"tries!\n"
        break

# Count down sequence

    if tries == 10:
        print "Bad luck after 10 attempts you still haven't guessed my number."
        break

raw_input ("\n\nPress enter key to exit.")

Here is a working version with a varying 'guessrange' :)

# CPU Guess My Number
#
# You pick a random number between 1 and 100
# The computer tries to guess it in the fewest attempts
# automatically saying if the number is too high or low
# or right on the money
#
# Pawel Aftanas 26/04/12

import random

print "\tWelcome to 'CPU Guess My Number'!"
print "\nI will think of a number between 1 and 100."
print "The CPU will try and guess the number in the fewest attempts possible.\n"

# Human to enter a number for the CPU to guess

the_number = int(raw_input("Enter a number between 1 and 100: "))

# Computer guesses the number using the random function

guessrange = (1, 101)

tries = 0

# The code is working but it is not narrowing down the choices.
while True:
    guess = random.randrange(*guessrange)
    tries += 1
    if guess > the_number:
        print "You chose", guess, "but my number is lower..."
        guessrange = (guessrange[0], guess)
    elif guess < the_number:
        print "You chose", guess, "but my number is higher..."
        guessrange = (guess + 1, guessrange[1])
    else:
        print "\n\n\t\t\tThat's Right!"
        print "\t\t\tthe number was", the_number,"..."
        print "\t\t...and it only took", tries,"tries!\n"
        break

# Count down sequence

    if tries == 10:
        print "Bad luck after 10 attempts you still haven't guessed my number."
        break

raw_input ("\n\nPress enter key to exit.")

line 29 of the code does nothing, here for comparision systematic one with average

# CPU Guess My Number
#
# You pick a random number between 1 and 100
# The computer tries to guess it in the fewest attempts
# automatically saying if the number is too high or low
# or right on the money
#
# Pawel Aftanas 26/04/12
print "\tWelcome to 'CPU Guess My Number'!"
print "\nI will think of a number between 1 and 100."
print "The CPU will try and guess the number in the fewest attempts possible.\n"

# Human to enter a number for the CPU to guess
the_number = int(raw_input("Enter a number between 1 and 100: "))

# Computer guesses the number using the random function
guessrange = (0, 101)

tries = 0

# The code is working but it is not narrowing down the choices.
while True:
    guess = sum(guessrange)/2
    tries += 1

    if guess > the_number:
        print "You chose", guess, "but my number is lower..."
        guessrange = (guessrange[0], guess)
    elif guess < the_number:
        print "You chose", guess, "but my number is higher..."
        guessrange = (guess, guessrange[1])
    else:
        print "\n\n\t\t\tThat's Right!"
        print "\t\t\tthe number was", the_number,"..."
        print "\t\t...and it only took", tries,"tries!\n"
        break

    # Count down sequence
    if tries == 10:
        print "Bad luck after 10 attempts you still haven't guessed my number."
        break

raw_input ("\n\nPress enter key to exit.")
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts learning and sharing knowledge.