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