简体   繁体   中英

How to run a function several times for different results in Python 3

EDIT: Thanks for each very detailed explanations for the solutions, this community is golden for someone trying to learn coding!! @DYZ, @Rob

I'm a newbie in programming, and I'm trying to make a simple lotto guesses script in Python 3.

The user inputs how many guesses they need, and the program should run the function that many times.

But instead my code prints the same results that many times. Can you help me with this?

I'm pasting my code below, alternatively I guess you can run it directly from here : https://repl.it/@AEE/PersonalLottoEn

from random import randint

def loto(limit):
    while len(guess) <= 6: #will continue until 6 numbers are found
        num = randint(1, limit)
        #and all numbers must be unique in the list
        if num not in guess: 
            guess.append(num)
        else:
            continue
    return guess

guess = [] #Need to create an empty list 1st

#User input to select which type of lotto (6/49 or 6/54)

while True:
    choice = int(input("""Please enter your choice:
    For Lotto A enter "1"
    For Lotto B enter "2"
    ------>"""))
    if choice == 1:
        lim = 49  #6/49
        break
    elif choice == 2:
        lim = 54  #6/54
        break
    else:
        print("\n1 or 2 please!\n")

times = int(input("\nHow many guesses do you need?"))

print("\nYour lucky numbers are:\n")

for i in range(times):
    result = str(sorted(loto(lim)))
    print(result.strip("[]"))

Your loto function is operating on a global variable, guess . Global variables maintain their values, even across function calls. The first time loto() is called, guess is [] . But the second time it is called, it still has the 6 values from the first call, so your while loop isn't executed.

A solution is to make the guess variable local to the loto() function.

Try this:

def loto(limit):
    guess = [] #Need to create an empty list 1st
    while len(guess) <= 6: #will continue until 6 numbers are found
        num = randint(1, limit)
        #and all numbers must be unique in the list
        if num not in guess:
            guess.append(num)
        else:
            continue
    return guess

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM