----- Original message ----- > On 9/4/10, lists <li...@justuber.com> 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? > Exactly. Essentially when you say > x=random.randint(1,2) > you are putting the value returned by randint into x, and this happens > only once. Had you moved that assignment into the while loop it would > keep replacing x, or toss in your case, with a random integer, but > because you just call it once it is only assigned once. Python, or any > language, would have no way of knowing that you want to reassign toss > each time. Loops are used to repeat actions, but you left the > assignment of your random int outside of the loop in attempt1 and so > there is no way for Python to know that you actually want toss updated > 100 times. I hope I explained this okay. > > > > 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"
Alex has already answered the question you've asked. I would just like to point out a subtle bug in your ATTEMPT 2 code. What your code does is this: - generate a random number 1 or 2 - test if it is 1 - if it isn't, generate a *new* random number - test if this new random number is 2 That the number of 1s and 2s add up to 100 is an accident of the way you are counting them. You should modify the code to generate a single random number each time through the loop and test whether it is 1 or 2. -- sent from my Nokia N900
_______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor