[Tutor] Giving a name to a function and calling it, rather than calling the function directly
Dave Angel
davea at ieee.org
Sat Sep 4 20:53:14 CEST 2010
lists wrote:
> Hi folks,
>
> I'm new to Python, I'm working my way through some intro books, and I
> have a question that I wonder if someone could help me with please?
>
> This is my attempt at solving an exercise where the program is
> supposed to flip a coin 100 times and then tell you the number of
> heads and tails.
>
> ATTEMPT 1 returns:
>
> The coin landed on tails 100 times
>
> The coin landed on heads 0 times
>
> ATTEMPT 2 returns:
>
> The coin landed on tails 75 times
>
> The coin landed on heads 25 times
>
> I expected to see the result in attempt 2. I don't fully understand
> why the results are different however. Is it because Python only runs
> the randint function once when I call it by the name I assigned to it
> in attempt 1, but it runs the function fully on each iteration of the
> loop in attempt 2? Why are these two things different?
>
> Thanks in advance,
>
> Chris
> ------------------------------------------------------------------
> ATTEMPT 1
> ------------------------------------------------------------------
> import random
>
> heads = 0
> tails = 0
> tossNo = 0
> toss = random.randint(1,2)
>
> while tossNo <= 99:
> if toss == 1:
> heads += 1
> tossNo += 1
> elif toss == 2:
> tails += 1
> tossNo += 1
>
> print "The coin landed on tails " + str(tails) + " times \n"
> print "The coin landed on heads " + str(heads) + " times \n"
>
> ------------------------------------------------------------------
> ATTEMPT 2
> ------------------------------------------------------------------
> import random
>
> heads = 0
> tails = 0
> tossNo = 0
>
> while tossNo <= 99:
> if random.randint(1,2) == 1:
> heads += 1
> tossNo += 1
> elif random.randint(1,2) == 2:
> tails += 1
> tossNo += 1
>
> print "The coin landed on tails " + str(tails) + " times \n"
> print "The coin landed on heads " + str(heads) + " times \n"
>
>
If your purpose was really to "give a name to a function," you can do
that by:
toss = random.randint
Notice that we do *not* include the parentheses. You want to call the
function (by whatever name) inside the loop. So change it to
while tossNo <= 99:
if toss(1,2) == 1:
heads += 1
tossNo += 1
I have no idea why you have an elif clause in there.
DaveA
More information about the Tutor
mailing list