Hvala svima na ogromnoj pomoći!
FizzBuzz kod koji smo radili na času:
brojac = 1
while True:
if (brojac % 3 == 0) and (brojac % 5 == 0):
print('fizzbuzz')
elif brojac % 3 == 0:
print('fizz')
elif brojac % 5 == 0:
print('buzz')
else:
print(brojac)
brojac = brojac + 1
Bilo je 15 ljudi juce. Pitao sam par ljudi o utiscima, kazu da mogu da prate i da je dobro objasnjeno.
Vise ljudi je reklo da bi volelo da se rade neki zadaci na casu, kazu nema bas vremena da kucaju, pa samo slusaju. Ali mozda taman za sledeca dva termina kad budemo dole mozemo malo vise tako da radimo prakticno. Da oni malo kucaju neki program, a mi da nadgledamo.
Sinoc sam nesto spomenuo i pokazao par ucenika koji su resili jedan zadatak pomocu slozenijeg uslova (koriscenjem ‘and’ i ‘or’ logickih operatora), i zelim ovde da ostavim kratak opis kao referencu za to sto sam spomenuo.
To su De Morganova pravila, wikipedija stranica za njih izgleda dosta ozbiljnije nego sto to u stvari jeste.
(a AND b) = NOT((NOT a) OR (NOT b))
i
(a OR b) = NOT((NOT a) AND (NOT b))
Nije neophodno ni za sta, ali je mozda nekome interesantno.
Bila je baš zanimljiva radionica, hvala Luki, Maji, Adrijanu i još jednom asistentu
Pozdrav,
dostavljam neke od zadataka koji su rađeni na Python radionici 14. aprila:
#Rekurzivna funkcija - kornjača grafika
import turtle as t
t.lt(90)
t.speed(0)
a = 30
def y(l):
if (l<15):
return
else:
t.fd(l)
t.lt(a)
y(0.7l)
t.rt(2a)
y(0.7*l)
t.lt(a)
t.fd(-l)
y(45)
t.done()
#Zadatak: Napraviti funkciju koja kao ulaz prima broj uglova i na osnovu toga crta geometrijsku figuru sa datim brojem uglova.
def geometrijskefigure(broj_uglova):
i = 0
while i < broj_uglova:
t.speed(10)
t.fd(360/broj_uglova)
t.left(360/broj_uglova)
i += 1
t.done()
return
broj_uglova = int(input(“unesi broj uglova:”))
geometrijskefigure(broj_uglova)
Da li su sutra predavanja ili vezbe?
Predavanja. Mislim da se radi for petlja i liste
Pozdrav svima,
Napravila sam jedan ‘program’ za analiziranje anketnih podataka - iz Excel datoteka, pomoću metoda iz pandas biblioteke.
Možete naći ovde kod programa, koji sam postavila iz dva razloga: 1. možda nekom bude koristan 2. ako neko ima predlog kako da se unapred (odnosno kako da uklopim umesto ovih silnih if funkcija - while funkciju), značio bi mi veoma savet kako to da uradim
import pandas as pd
class AnalizaAnkete:
def __init__(self, filename):
self.dataset = pd.read_excel(filename)
def prvihnkolona(self, n):
""" Funkcija prvihnkolona pokrece metodu head koja prikazuje prvih pet redova baze podataka.
Parametri
----------
self: objekat
n: broj redova
Returns
-------
Prvih n redova baze podataka.
"""
return self.dataset.head(n)
def ukupanbrojredovaikolona(self):
""" Funkcija ukupanbrojredovaikolona pokrece metodu shape koja prikazuje ukupan broj redova i kolona.
Parametri
----------
self: objekat
Returns
-------
Broj redova i kolona baze podataka.
"""
return self.dataset.shape
def kolone(self):
""" Funkcija kolone pokrece metodu columns koja išćitava imena svih kolona u bazi podataka.
Parametri
--------
self: objekat
Returns
--------
Imena svih kolona.
"""
return self.dataset.columns
def vrednostikategorija(self, column_name):
""" Funkcija vrednostikategorija pokrece metodu value_counts koja računa vrednosti za svaku kategoriju određene kolone (pitanja).
Parametri
--------
self: objekat
column_name: ime kolone
Returns
--------
Ukupne apsolutne vrednosti za sve kategorije određene kolone (određenog pitanja).
"""
return self.dataset[column_name].value_counts()
def raspodelakategorija(self, column_name):
""" Funkcija raspodelakategorija pokrece metodu value_counts koja računa vrednosti za određenu kolonu u procentima.
Parametri
--------
self: objekat
column_name: ime kolone
Returns
--------
Procentne vrednosti za sve kategorije određene kolone (određenog pitanja).
"""
return self.dataset[column_name].value_counts(normalize=True)
def dijagram(self, column_name):
""" Funkcija dijagram pokrece metodu koja vraća trakastri dijagram za određenu kolonu.
Parametri
--------
self: objekat
column_name: ime kolone
Returns
--------
Trakasti dijagram za određenu kolonu (određeno pitanje).
"""
return self.dataset[column_name].value_counts().plot(kind='bar')
def pita(self, column_name):
""" Funkcija dijagram pokrece metodu koja vraća pita grafikon za određenu kolonu.
Parametri
--------
self: objekat
column_name: ime kolone
Returns
--------
Pita grafikon za određenu kolonu (određeno pitanje).
"""
return self.dataset[column_name].value_counts().plot(kind='pie')
#na osnovu definisane klase, kreiramo objekat koji će kao ulaz primiti rezultate ankete
ra = AnalizaAnkete('Ime ankete.xlsx')
dataset = pd.read_excel('Ime ankete.xlsx')
osnovnaanaliza = input("Da li želite da dobijete osnovni pregled rezultata ankete? ")
if osnovnaanaliza == "da":
pregled = ra.prvihnkolona(5), ra.kolone(), ra.ukupanbrojredovaikolona()
print(pregled)
imekolone = input('Molim vas unesite ime kolone koju želite da analizite:')
if imekolone in dataset.columns:
specificnaanaliza = input('Molim vas unesite željenu analizu nad izabranom kolonom [apsolutne vrednosti, vrednosti u procentima, trakasti dijagram, pita dijagram]')
if specificnaanaliza == 'apsolutne vrednosti':
vrednosti1 = ra.vrednostikategorija(imekolone)
print(vrednosti1)
elif specificnaanaliza == 'vrednosti u procentima':
vrednosti2 = ra.raspodelakategorija(imekolone)
print(vrednosti2)
elif specificnaanaliza == 'trakasti dijagram':
dijagram1 = ra.dijagram(imekolone)
print(dijagram1)
elif specificnaanaliza == 'pita dijagram':
dijagram2 = ra.pita(imekolone)
print(dijagram2)
else:
print('Niste uneli analizu koja spada u ponuđenu listu analiza, molim vas unesite tačno kako je napisano.')
specificnaanaliza = input('Molim vas unesite željenu analizu nad izabranom kolonom [apsolutne vrednosti, vrednosti u procentima, dijagram]:')
else:
print('Uneli ste nepostujuće ime kolone')
imekolone = input('Molim vas unesite ime kolone koju želite da analizirate:')
else:
imekolone = input('Molim vas unesite ime kolone koju želite da analizite:')
if imekolone in dataset.columns:
specificnaanaliza = input('Molim vas unesite željenu analizu nad izabranom kolonom [apsolutne vrednosti, vrednosti u procentima, trakasti dijagram, pita dijagram]')
if specificnaanaliza == 'apsolutne vrednosti':
vrednosti1 = ra.vrednostikategorija(imekolone)
print(vrednosti1)
elif specificnaanaliza == 'vrednosti u procentima':
vrednosti2 = ra.raspodelakategorija(imekolone)
print(vrednosti2)
elif specificnaanaliza == 'trakasti dijagram':
dijagram1 = ra.dijagram(imekolone)
print(dijagram1)
elif specificnaanaliza == 'pita dijagram':
dijagram2 = ra.pita(imekolone)
print(dijagram2)
else:
print('Niste uneli analizu koja spada u ponuđenu listu analiza, molim vas unesite tačno kako je napisano.')
specificnaanaliza = input('Molim vas unesite željenu analizu nad izabranom kolonom [apsolutne vrednosti, vrednosti u procentima, dijagram]:')
else:
print('Uneli ste nepostujuće ime kolone')
imekolone = input('Molim vas unesite ime kolone koju želite da analizirate:')
Za deljenje koda na forumu mozes da koristis tri backtick-a na pocetku i na kraju za blok preformatiranog teksta, ili mozes da uploadujes fajl citav.
`` < ovo je backtick, za pocetak i kraj bloka ti trebaju 3 (ne 2 kao ovde)
Alternative za te lancane elif izraze su tradicionalni switch-case izrazi koje python nije imao do verzije 3.10 valjda, sad sam i ja procitao, evo ti izvor za to:
Takodje vidim da si koristila neke varijable koje su samo privremene, trebalo bi da su ti one nepotrebne, e.g. umesto:
if specificnaanaliza == 'apsolutne vrednosti':
vrednosti1 = ra.vrednostikategorija(imekolone)
print(vrednosti1)
elif specificnaanaliza == 'vrednosti u procentima':
vrednosti2 = ra.raspodelakategorija(imekolone)
print(vrednosti2) ....
trebalo bi da radi i:
if specificnaanaliza == 'apsolutne vrednosti':
print(ra.vrednostikategorija(imekolone))
elif specificnaanaliza == 'vrednosti u procentima':
print(ra.raspodelakategorija(imekolone)) ....
i onda jos ako zelis da pokusas sa pythonovim match-case-om:
match specificnaanaliza:
case "apsolutne vrednosti":
print(ra.vrednostikategorija(imekolone))
case "vrednosti u procentima":
print(ra.raspodelakategorija(imekolone))
.
.
.
case _:
print('Niste uneli analizu koja spada u ponuđenu listu analiza, molim vas unesite tačno kako je napisano.')
Ako imas strpljenja za to, mozes da pokusas to, ako nadjes neku gresku kod mene ili jos bolji nacin, podeli i to sa nama.
Hvala puno
Slažem se za formatiranje, koristi ove backtick-ove jer je ovako nečitljivo! Sviđa mi se kako si čitljivo napisala sve, razdvojila funkcije za svaku manju stvar, lepo napisala dokumentaciju sa svaku (obično početnici imaju tendeciju da prave kupus od koda:D).
Inače, mislim da nema lakšeg načina bez da koristiš if-ove ili match (što je objasnio @_il ), tako da je ovo najpitkije rešenje (ima nekih fora sa dictionaryjem koji mapira string specificnaanaliza
u funkciju koja se poziva, ali to izlazi iz kursa:D).
Jer sam moderator, mogu da editujem tudje postove, uzeo sam slobodu da to uradim za to formatiranje @Maya
Nadam se da niko ne zameri :))
vau svaka cast! ovaj kod moze da se koristi kao biblioteka, pa kad nekom treba samo moze da uradi “import analizaankete”
Evo napokon i materijala sa 8. casa:
Na istom linku ce se uskoro naci i fajlovi sa prethodnih casova.
Ako se neko ne snalazi na gitei, klikom na ovaj link:
https://gitea.dmz.rs/eline/python-radionica/archive/main.zip
mozete direktno preuzeti sve fajlove (samo obratiti paznju da u slucaju da neko doda nesto od fajlova, morate ponovo da preuzimate isti link).
Da li će biti u narednom periodu sličnih radionica za početnike?
Bilo je razgovora, mada jos nije dogovoreno nista. Dobrim delom zavisi i od interesovanja ljudi tako da ako imate neke ideje, slobodno ih mozete ovde (na forumu generalno, ali i na ovom thread-u) podeliti. U medjuvremenu, na ovom thread-u imate vecinu linkova ka prezentacijama i nekim vezbama koje mozete koristiti, a ako imate neke zabune oko materijala, mozete da saljete pitanja na forum ili direktno u mail.
Imamo u planu neke nastavke, samo da se organizujemo oko toga. Bice na forumu napisano sve, to nam je glavni izvor informacija za dogadjaje, a ima i na Decentrala uglavnom van ovog kursa sto je bio u KC Gradu drzimo razna desavanja ponedeljkom i utorkom u DC Krovu.
Hvala puno na info. Generalno mi se dopada ideja cele vase organizacije, zato pitam jer bih volela da prisustvujem jos nekom dogadjaju u okviru zajednice.
Bice python radionica u ponedeljak (26. Jun) u 19h u DC Krovu