[Tutor] lottery problem (Was Re: (no subject))

Alan Gauld alan.gauld at btinternet.com
Fri Dec 19 01:55:49 CET 2014


On 18/12/14 21:10, Abdullahi Farah Mohamud wrote:
> hello i need help with a program and i dont understand what is wrong

Please always add a meaningful subject line.

> when the computers asks the user if he would like to go again
 > and the user says yes, it asks for the number of lines
 > and then if the user clicks 3 it will only give
> me one line.

> import random
> abz = 0
> lines = int(input('How many lines would you like?'))
> loop = lines
> if lines >7:

You might want to check fpor negative numbers too
or you will loop forever.

>      print('Too many lines saaxib')
>      exit()
> else:
>      print()
> while lines != 0:
>      line1 = random.randint (1,7)
>      line2 = random.randint (8,14)
>      line3 = random.randint (15,21)
>      line4 = random.randint (22,28)
>      line5 = random.randint (29,35)
>      line6 = random.randint (36,42)
>      line7 = random.randint (43,49)
 >      lines = lines - 1
 >      print(line1, line2, line3, line4, line5, line6,line7)

Down to here basically works. But...

You could have used a list instead of all the
individual variables

line[0] = ...
line[1] = ...

But then you could get clever and use a loop:

while lines != 0:
    start = 1
    period = 7
    for lineNum in range(7):
        line[lineNum] = random(start,period)
        start += period
        period += period
    print (*line)
    lines -=1


> while abz == 0:
>      again = input('Would you like to go again?')
>      if again == 'yes':
>          lines = int(input('How many lines would you like?'))
>      line1 = random.randint (1,7)

Notice this is outside the if statement so will execute
regardless of the answer.

But unlike the equivalent section above it is NOT in a
while loop so will only execute once per question.
Which is what you were seeing.

>      line2 = random.randint (8,14)
>      line3 = random.randint (15,21)
>      line4 = random.randint (22,28)
>      line5 = random.randint (29,35)
>      line6 = random.randint (36,42)
>      line7 = random.randint (43,49)
>      lines = lines - 1
>      print(line1, line2, line3, line4, line5, line6,line7)

Since you are duplicating code you could put it in a function - have you 
seen functions yet?

def getLine(start=1, period=7):
    line = []
    for lineNum in range(7):
        line[lineNum] = random(start,period)
        start += period
        period += period
    return line

then the while loop becomes:

while lines != 0:
     line = getLine()
     print(*line)
     lines -= 1

>      if again == 'no':
>          print('Okay the program is finished saaxib')
>          exit()

HTH
-- 
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
http://www.amazon.com/author/alan_gauld
Follow my photo-blog on Flickr at:
http://www.flickr.com/photos/alangauldphotos




More information about the Tutor mailing list