Python radionice

Hvala svima na ogromnoj pomoći!

2 Likes

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.

3 Likes

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.

2 Likes

Bila je baš zanimljiva radionica, hvala Luki, Maji, Adrijanu i još jednom asistentu

3 Likes

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(2
a)
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)

2 Likes

Da li su sutra predavanja ili vezbe?

Predavanja. Mislim da se radi for petlja i liste

2 Likes

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:')
1 Like

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.

2 Likes

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).

3 Likes

Jer sam moderator, mogu da editujem tudje postove, uzeo sam slobodu da to uradim za to formatiranje @Maya
Nadam se da niko ne zameri :))

1 Like

vau svaka cast! ovaj kod moze da se koristi kao biblioteka, pa kad nekom treba samo moze da uradi “import analizaankete”

1 Like

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).

4 Likes

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.

1 Like

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.

1 Like

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.

3 Likes

Bice python radionica u ponedeljak (26. Jun) u 19h u DC Krovu

2 Likes