anyone tell me why my program will not run?

Larry Hudson orgnut at yahoo.com
Sun Nov 22 16:42:20 EST 2015


On 11/21/2015 06:44 PM, Larry Hudson wrote:
> On 11/20/2015 07:30 PM, Dylan Riley wrote:
>> i am learning python and was tasked with making a program that flips a coin 100 times and then
>> tells you
>> the number of heads and tails.
>>
[snip]
<original code>
>> import random
>>
>> heads = int("1")
>> tails = int("2")
>> flips = 100
>> headscount = 0
>> tailscount = 0
>>
>> while flips != 0:
>>      flips -= 1
>>
>> result = random.randint(heads, tails)
>> if result = heads:
>>      headscount += 1
>> else:
>>      tailscount += 1
>>
>>
>> print(headscount, tailscount)
[snip]
</original code>

> It doesn't run because it if full of errors, which have already been discussed by others.
>
> I just wanted to show you a (radically) different approach that you can study (or not... your
> choice).  I'm leaving out your heading and just showing the heart of the program.  I am not
> necessarily recommending this, I just wanted you to see a different way of looking at the
> problem.  Except for the initialization and printing of the results, the entire thing is done in
> one two-line for loop.
>
> <code>
> from random import randint
>
> #  Put your heading text here...
>
> HEADS = 0
> TAILS = 1    #  Note:  Python _convention_ is to upper-case constants.
> counts = [0, 0]
>
> for flips in range(100):
>      counts[randint(0, 1)] += 1
>
> print('Number of heads: ', counts[HEADS])
> print('Number of tails: ', counts[TAILS])
> </code>
>
> Note that the HEADS and TAILS constants are only used in one place (the final print functions),
> you could simply leave them out and directly use 0 and 1 in those final print()s.
>
>       -=- Larry -=-
>

I purposely didn't give any explanation of this code in my original message because I wanted to 
allow people (particularly the OP) a chance to figure it out by themselves. But here's a bit of 
explanation...

The counts variable is a two-element list. It's usage is, the count of heads is counts[0] and 
the count of tails is counts[1] -- or equivalently, counts[HEADS] and counts[TAILS]. Both values 
are initialized to 0.

The body of the for loop is the very terse (and confusing?) expression:
     counts[randint(0, 1)] += 1

But if you break it down and look at the pieces individually, it's not too hard to understand.
1. randint(0, 1) gives a random value of either 0 or 1.
2. counts[...] gives you access to the heads count or tails count (... is the 0 or 1 from the 
randint() function).
3. counts[...] += 1 increments the appropriate counter value.

Broken down that way it’s not too hard to understand, is it?   :-)

-=- Larry -=-




More information about the Python-list mailing list