28 grudnia 2017

Python – Wybory ver.1

Hej, pierwszy wpis dotyczący programowania 🙂
Dziś piszemy swój program w pythonie. Będzie to aplikacja konsolowa, za pomocą której będziemy mogli zagłosować na jednego z kandydatów chcących objąć wysokie urzędnicze stanowisko.

Zacznijmy od początku.

Aby program mógł działać, potrzebujemy stworzyć listę kandydatów.

candidates = [[1,'Mirek Potęga',0],[2,'Jakub Marchewka',0],[3,'Monika Jeleń',0],[4,'Izabela Kluska',0]]

Powyższe nazwiska są oczywiście fikcyjne. Stworzyłem tablicę w której są kandydaci, numery przy nich to ich identyfikatory, oraz ilość oddanych głosów.
Na Pana Mirka Potęgę oddano 0 głosów, a jego identyfikator to 1.

Również zadeklarujemy dwie zmienne które później zostaną wykorzystane w programie:

response = None
countResponse = 0

„response” to wartość wpisana przez użytkownika, zaś „countResponse” to ilość oddanych głosów w programie.

Następnym krokiem jest stworzenie funkcji która pozwoli nam wyświetlić wyniki głosowania

def ShowCandidates():
    candidate = None

    for candidate in candidates:
        if(candidate[2] != 0 and countResponse != 0):
            print(str(candidate[0])+'. '+str(candidate[1])+' '+str(int((candidate[2] / countResponse)*100))+'%')
        else:
            print(str(candidate[0]) + '. ' + str(candidate[1])+' 0%')

Na początku deklarujemy zmienną wewnątrz funkcji „candidate”.

Następnie wykonujemy pętle, wszystkich kandydatów i sprawdzamy czy kandydat którym aktualnie się zajmujemy otrzymał przynajmniej jeden głos, oraz czy w ogóle w programie został jakikolwiek głos oddany, czemu ?
Ponieważ jeśli ilość oddanych głosów w programie, lub ilość głosów oddanych na kandydata będzie równa 0, a my będziemy chcieli dokonać operacji matematycznych dzielenia, otrzymamy błąd.

A więc, jeśli kandydat otrzymał min 1 głos i ilość głosów w programie jest większa niż 0, wyświetlimy identyfikator kandydata, jego imię i nazwisko oraz podzielimy ilość głosów na kandydata z całościową ilością oddanych głosów, a następnie pomnożymy przez 100, otrzymamy dzięki temu procent oddanych głosów 🙂

W przeciwnym wypadku wejdziemy do else, bez operacji matematycznych. Wyświetlimy wtedy tylko surowe dane, identyfikator oraz imię i nazwisko.

Następnym krokiem jest stworzenie funkcji która pobierze od użytkownika numer identyfikacyjny kandydata na którego zamierza użytkownik oddać swój głos:

def GetResponse():
    val = None
    val = input()
    return val

Znów na początku deklarujemy zmienną „val” i przypisujemy do niej wartość None, następnie do tej samej zmiennej przypiszemy wartość wpisaną przez użytkownika i zwracamy.

Zaczynamy teraz właściwą część programu

ShowCandidates()

Wywołujemy funkcję zadeklarowaną na początku, czyli wyświetlimy funkcję „ShowCandidates”, w niej za każdym razem warunek if nie zostanie spełniony, ponieważ na początku nie oddaliśmy jeszcze żadnego głosu, czyli wróć teraz do opisu funkcji i zobacz. Zawsze wyświetlimy identyfikator użytkownika oraz jego imię i nazwisko.

Wyświetlamy również  tekst wyjaśniający jak obsłużyć program:

print('\n\n')
print('Aby zagłosować na kandydata, wpis jego numer.\n')
print('Aby zakończyć program, wpisz exit')

Oraz najważniejsza część programu, która znajduje się w pętli while

while True:

    response = GetResponse()

    if response == 'exit':
        break

    for candidate in candidates:
        if(int(candidate[0])==int(response)):
            countResponse = countResponse + 1
            candidate[2] = candidate[2] + 1

            ShowCandidates()

Do zmiennej „response” przypisujemy numer identyfikacyjny wpisany przez użytkownika programu, następnie, jeśli użytkownik wpisał „exit”, pętla while zostaje przerwane przez polecenie „break” i w rezultacie program przestaje działać.

W przeciwnym przypadku, czyli jeśli warunek response == 'exit’ nie zostaje spełniony, przechodzimy do pętli for, sprawdzamy identyfikator kandydata i porównujemy go z wpisanym identyfikatorem przez użytkownika, jeśli oba się zgadzają, zwiększamy liczbę głosów na kandydata o 1 i wyświetlamy całą listę kandydatów przez funkcję ShowCandidates.

 

Wpis ma na celu bardzo szybkie i ogólne pokazanie zasad działania programu Wybory ver.1

Postaram się wkrótce program dopracować, rozbudować i opisać jego lepszą/nowszą wersję.