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 == 鈥歟xit鈥 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臋.