3 marca 2018

Aplikacja konsolowa python: Losowanie Lotto cz.1

Specjalnie dla ludzi którzy grają w gry losowe postanowiłem wykonać symulator lotto.Wykorzystamy w tym celu moduł random, listy, stworzymy klasę i wewnątrz niej metody.

Zaczynając od początku, musimy najpierw opisać działanie programu w najprostszym, polskim języku. To ważne, aby wykonać tę czynność jeszcze przed napisaniem pierwszej linii programu.

A więc… Do dzieła.

Poniżej opiszę jak powinien działać nasz program.

1. Program losuje liczby z przedziału od 1 do 49
2. Pyta użytkownika o ilość wysłanych kuponów.
3. Prosi użytkownika o podanie liczb
4. Sprawdza czy choć jeden z kuponów zgadza się z wylosowanymi numerami
5. Wypisuje na końcu albo informacje o wygranej, albo o porażce.

W części pierwszej, skupimy się jedynie na losowaniu liczb przez program.

Stwórzmy sobie teraz podstawową klasę naszego programu:

class Lotto:
    countDraw = 0
    userNumber = []
    randNumber = []

Jak widzicie powyżej, utworzyłem również jedną zmienną int, jest to ilość wysłanych kuponów lotto przez użytkownika. Następnie dodałem dwie puste listy, pierwsza to liczby wykreślone przez użytkownika. Druga lista to numery wylosowane przez program.

Kolejnym naszym krokiem będzie uzupełnienie listy randNumber o prawdziwie wylosowane liczby. Tworzymy więc w klasie Lotto metodę którą nazwiemy randNumber

def randNumber(self):
    tempNumber = []

    oneNumber = random.randint(1, 49)
    tempNumber.append(oneNumber)

    twoNumber = random.randint(1, 49)
    tempNumber.append(twoNumber )

    threeNumber = random.randint(1, 49)
    tempNumber.append(threeNumber )

    fourNumber = random.randint(1, 49)
    tempNumber.append(fourNumber )

    fiveNumber = random.randint(1, 49)
    tempNumber.append(fiveNumber )

    sixNumber = random.randint(1, 49)
    tempNumber.append(sixNumber )

    tempNumber.sort()
    self.randNumber = tempNumber

Co się dzieje w powyższej metodzie ?

A no jest bardzo prosta, wewnątrz randNumber tworzymy listę tymczasową, dla tego nazwałem ją tempNumber. Losujemy za pomocą modułu rand liczbę z przedziału od 1 do 49 i zapisujemy do listy temp Number, na końcu gdy już cała lista osiągnie takich liczb 6 zostaje posortowana od najmniejszej do największej oraz zapisana do listy randNumber.

W tej chwili muszę coś wytłumaczyć.

Lista tempNumber jest stworzona wewnątrz metody randNumber i tam będzie widoczna. Nie ma do niej dostępu z poza metody randNumber. Lista randNumber (tak, nazwa listy jest taka sama jak nazwa metody) jest zadeklarowana ponad metodami, aby odwołać się do niej, musimy jej nazwę poprzedzić słowem self. Mamy do niej dostęp globalny. Poniżej wszystko się wyjaśni.

Główna część programu wygląda następująco:

program = Lotto()

program.randNumber()

Stworzyliśmy obiekt klasy Lotto, następnie uruchomiliśmy metodę randNumber.

Możemy niżej wpisać w ramach testu:

print(program.randNumber)

Widzicie ? Wyświetliliśmy listę numerów którą metoda randNumber() dla nas stworzyła. Nazwy choć takie same różnią się nawiasami.

Gdy nawiasy podamy, język python wie, że odwołujemy się do metody. Gdy nawiasy pominiemy, oznacza to, że odwołujemy się do zmiennej, lub w naszym przypadku listy.

Nie zapomnijmy zaimportować modułu random, dopiszmy więc na początku naszego kodu:

import random

Uruchom sobie powyższy program kilka razy. Pewnie zauważysz, że losują się czasem te same liczby. Przecież tak nie może to działać! I słusznie, nie może… Dla tego zmodyfikujemy nasz program, ale to już w następnym wpisie.