[Tutor] (no subject)

Mats Wichmann mats at wichmann.us
Thu Oct 5 10:14:18 EDT 2017

```On 10/03/2017 06:29 PM, Alan Gauld via Tutor wrote:
> On 03/10/17 22:49, steve.lett777 at gmail.com wrote:
>
>> That is guessesTaken. It reads 0 when it should be a larger number.
>
> What makes you think so?
> You never increase it from its initial value so, quite correctly it
> stays at zero.

>
>> I am a beginner having another try to get it!
>
> Remember the computer just does what you tell it and nothing more.
> It has no idea what you are trying to do so it needs you to tell it
> exactly what to do. Every single thing.
>
> And in this case you need to add 1 to guessesTaken each time
> the user makes a guess.
>
>> # This is a Guess the Number game.
>> import random
>>
>> guessesTaken = 0
>>
>> print('Hello! What is your name?')
>> myName = input()
>>
>> number = random.randint(1, 20)
>> print('Well, ' + myName + ', I am thinking of a number between 1 and 20.')
>>
>> for i in range(6):
>>     print('Take a guess.') # Four spaces in front of "print"
>>     guess = input()
>>     guess = int(guess)
>
> you probably should have a line here like:
>
>       guesesTaken += 1
>
>>     if guess < number:
>>         print('Your guess is too low.') # Eight spaces in front of "print"
>>
>>     if guess > number:
>>         print('Your guess is too high.')
>>
>>     if guess == number:
>>         break

This sequence doesn't feel ideal: if guess == number you break out of
the script, then the first thing thereafter is you do the same check
again.  Why not move that work up to the first check inside the for loop?

>> if guess == number:
>>     guessesTaken = str(guessesTaken)
>>     print('Good job, ' + myName + '! You guessed my number in ' +
>>       guessesTaken + ' guesses!')
>>
>> if guess != number:
>>     number = str(number)
>>    print('Nope. The number I was thinking of was ' + number + '.')

Second, you need to still detect the case where you exited the loop
without ever matching.  But it doesn't have to be a disconnected test
like this one which risks at some time becoming detached - maybe you add
some code in front of it, then later change it, then change it some more
and at some point guess becomes changed and the test is invalid.  It
sounds silly here, but this happens in real code that is more complex.

Python has a syntax feature to help you out here: the for statement can
take an else clause, which means "finished the loop without otherwise
breaking out of it".  This would make the conceptual flow look like:

for i in maximum-guesses:
# prompt for guess
# guidance if wrong
if correct:
# congratulate
break
else:
# guesses ran out, commiserate

```