[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