Aplikacja konsolowa python: Losowanie Lotto cz.3
Witam, dziś zakończymy nasz program Losowanie Lotto. Poprzednio zatrzymaliśmy się na przekazaniu ilości kuponów do tajemniczej metody draw w głównej klasie programu. Bez zbędnego przydługawego wstępu, od razu zapraszam do dalszej części wpisu abyśmy mogli szybko omówić wykonanie dalszej części programu.
Przekazanie parametru userCountDraw (ilość wysłanych kuponów) do metody draw zapisujemy w ten sposób:
program.draw(int(userCountDraw))
Jak widzimy powyżej, od razu typ ustalamy na int.
Aby na ekranie nie zobaczyć błędu, musimy metodę stworzyć wewnątrz klasy Lotto
def draw(self,x): for i in range(x): tempNumber = [] oneNumber = input("Podaj pierwszą liczbę (przedział od 1 do 49): ") tempNumber.append(self.checkNumber(oneNumber, tempNumber)) twoNumber = input("Podaj drugą liczbę (przedział od 1 do 49): ") tempNumber.append(self.checkNumber(twoNumber,tempNumber)) threeNumber = input("Podaj trzecią liczbę (przedział od 1 do 49): ") tempNumber.append(self.checkNumber(threeNumber, tempNumber)) fourNumber = input("Podaj czwartą liczbę (przedział od 1 do 49): ") tempNumber.append(self.checkNumber(fourNumber, tempNumber)) fiveNumber = input("Podaj piątą liczbę (przedział od 1 do 49): ") tempNumber.append(self.checkNumber(fiveNumber, tempNumber)) sixNumber = input("Podaj szóstą liczbę (przedział od 1 do 49): ") tempNumber.append(self.checkNumber(sixNumber, tempNumber)) tempNumber.sort() self.userNumber.append(tempNumber)
W metodzie draw wykorzystujemy pętlę for, z parametrem zgodnym z ilością kuponów. Jeśli metoda draw będzie wyglądała jak na powyższym przykładzie, każda błędnie podana liczba (powtórzona lub nie zgodna z oczekiwaniami, patrz przedział i typ int) spowoduje nie zapytanie o ponowne jej wpisanie, a wylosowanie przez automat ponownej. Należy to zmienić!
Zmodyfikujmy więc checkNumber, gdyż ta metoda jest wywoływana zarówno przy draw jak i przy randNumber
def checkNumber(self, number, list, created, returnData=None, brokeData=False): while True: try: int(number) brokeData = False except ValueError: brokeData = True if (brokeData == False) and (number not in list) and (int(number) > 0 and int(number) <50): returnData = int(number) break else: if created == 'user': number = input("Podaj prawidłową wartość, liczbę wcześniej nie użytą, z przedziału od 1 do 49: ") else: number = random.randint(1,49) return returnData
Dopisaliśmy kolejny parametr created, funkcja ta musi wiedzieć czy chcemy aby po błędnej liczbie wylosowała sama kolejną, czy użytkownik ma ją podać. W tej metodzie również sprawdzamy za pomocą try czy podana liczba jest na pewno liczbą, czy znajduje się w przedziale od 1 do 49.
Teraz nie zapomnijmy aby w draw podać przy każdym wywołaniu checkNumber ostatniego parametru jakim jest string 'user’. Również w metodzie randNumber przy każdym wywołaniu draw podać parametr jakim jest string 'auto’.
W głównej części programu dopisujemy na koniec:
print('Wydałeś łącznie '+str(int(userCountDraw)*3)+'zł') if(program.checkReward(program.randNumber,program.userNumber)): print('Wygrałeś, liczby wylosowane przez system to: '+str(program.randNumber)) else: print('Nie wygrałeś, liczby wylosowane przez system to: '+str(program.randNumber)) input('Enter zakończy program...');
Całość jest dostępna pod poniższym linkiem: