[Tutor] Newbie question: random.sample illusion?
Moedeloos Overste
kloosterjunkie at hotmail.com
Thu Dec 7 18:21:42 CET 2006
Hi everybody,
I'm in the process of learning Python and working my way through O'Reilly's
"Learning Python". As an excercise I wrote (some copy/paste as well) a small
lottery program just to learn how to work with lists and dictionarys etc.
The user has to enter 6 numbers from a range(1-45). The numbers are stored
in a list(num_list). Then the program asks the user how many times(vDraws)
he wants to play the lottery with his numbers. After entering the program
draws the lottery the desired number of times and compares the winning
numbers with the users numbers.
Now, by accident I stumbled upon the following; if the user enters the
numbers 1 to 6 as his lottery numbers he always wins! So somewhere I must
have made a mistake. Could somebody have a look at the code please and tell
me where I took a wrong turn?
winnings=0
right2=1
right3=4
right4=15
right5=450
right6=1000000
user_nums=[] # empty List for numbers
print "Kies je nummers tussen 0 en 46"
print
whereat=1
listindex=0
# when 7th number is inputted loop breaks
while whereat <= 6:
num=raw_input("Voer "+str(whereat)+". Lotto nummer in: ")
# check that user inputted value is not smaller than 1 or bigger than 45
# and that it is not already in user_nums
if num != "" and len(num) != 0:
if int(num) >= 1 and int(num) <= 45 and num not in user_nums:
user_nums.append(num)
whereat+=1
listindex+=1
# if above statement if false just pass and ask for the number
again!
else:
pass
print '1 trekking kost U 1 euro inzet'
print
vDraws = input("Hoe vaak wil je in de lotto spelen met deze nummers? :>")
# Create dictionary for statiscal purposes later on :-)
d={1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0, 8:0, 9:0, 10:0, 11:0, 12:0, 13:0,
14:0, 15:0,
16:0, 17:0, 18:0, 19:0, 20:0, 21:0, 22:0, 23:0, 24:0, 25:0, 26:0, 27:0,
28:0,
29:0, 30:0, 31:0, 32:0, 33:0, 34:0, 35:0, 36:0, 37:0, 38:0, 39:0, 40:0,
41:0, 42:0,
43:0, 44:0, 45:0}
match=0
count=0
inzet=vDraws * 1
while vDraws > 0:
x=random.sample(range(1,46), 6)# draws lottery from given range
for i in x:
y=int(i)
d[y] = int(d[y])+ 1 #stores values in lottonumbers dictionary
for p in user_nums:
count+=1
y=str(y)
if p in y:
match+=1 # increase matching variable by one if its right
number
# caculating winnings
if match ==2:
winnings+=right2
match=0
elif match ==3:
winnings+=right3
match=0
elif match == 4:
winnings+=right4
match=0
elif match == 5:
winnings+=right5
match=0
elif match == 6:
winnings+=right6
match=0
vDraws = vDraws - 1
# sorting dictionary by its values
items=d.items()
backitems=[ [v[1],v[0]] for v in items]
backitems.sort()
sortedlist=[ backitems[i][1] for i in range(0,len(backitems))]
print
print
print
saldo=winnings-inzet
print
print
print '-' * 80
if saldo > 0:
print 'U heeft', saldo, 'euro winst gemaakt!'
else:
print 'U heeft', saldo, ' euro verlies geleden!'
print 'U heeft in totaal gewonnen', winnings, 'euro.'
print 'Uw inzet was', inzet, 'euro'
print 'De 6 meest gevallen getallen waren:',
for x in sortedlist[0:6]: print x, #prints the 6 most drawn numbers
_________________________________________________________________
Veilig & gerust mailen met de verbeterde antivirusscan van Live Mail!
http://imagine-windowslive.com/mail/launch/default.aspx?Locale=nl-nl
More information about the Tutor
mailing list