www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

Python obsežen program, kako ga razbijem v module

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Raspberry Pi sekcija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3351
Aktiv.: 15.09
Kraj: Dragomer

PrispevekObjavljeno: Tor Avg 31, 2021 10:51 am    Naslov sporočila:  Python obsežen program, kako ga razbijem v module Odgovori s citatom

Pozdrav,
Kadar postane program preobsežen, je smiselno ga razbit v več modulov, datotek, funkcij etc. Vsak od le teh naj bi bilo posebna datoteka na disku, ki bi se klicala v glavni program z import ali kako drugo komando.

Ima kdo preprost in preizkušen tutorial, kako?

Vilko

_________________
Prepričan sem, da je inteligentnih bitij v vesolju veliko. A ker so inteligenta, se nam nočejo prikazati.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3351
Aktiv.: 15.09
Kraj: Dragomer

PrispevekObjavljeno: Tor Avg 31, 2021 11:09 am    Naslov sporočila:   Odgovori s citatom

pravzaprav gre, le ne sme modula klicati kot funkckijio recimo tako:

a.py vsebuje:
print ("Print from a.py")
import b

b.py vsebuje
print ("Print from b.py")

Rezultat ko kličem Python a.py je
print ("Print from a.py")
print ("Print from b.py")

Sem se zaletaval v funkcijo, s funkcijo pa ne gre tako simple. Ok Gremo delat.

_________________
Prepričan sem, da je inteligentnih bitij v vesolju veliko. A ker so inteligenta, se nam nočejo prikazati.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
dumr666
Član
Član



Pridružen-a: Tor 31 Jan 2012 23:30
Prispevkov: 409
Aktiv.: 2.76
Kraj: Ljubljana

PrispevekObjavljeno: Sre Sep 08, 2021 3:16 pm    Naslov sporočila:   Odgovori s citatom

za začetek ti je najlažje če si narediš več modulov, moja koda ni najbolj By the book, je pa dovolj dobra za domače potrebe.
Sem ti pripravil par datotek, da bo lažje razumeti, najbolje je da si jih poimenujes kot sem dopisal. V mojem primeru si je potrebno shraniti vse datoteke v isto mapo, v nasprotnem primeru je potrebno pri importu navesti tudi relativne poti glede na glavni program. Postavis si lahko tudi lastno knjiznico, samo v tistem primeru si moras potem dodati zadeve v Python path.
Datoteke slovenscina.py, matematika.py ter popoldanski_pouk.py vsebujejo razrede (objekte) ki jih uporabljamo in imajo svoje lastne funkcije. __init__ skrbi za inicializacijo razreda in ponavadi jih uporabljamo zato da imamo ločene instance. Naprimer razred ucenec, ima ime, priimek, starost, itd itd in bi potem v nekem glavnem programu postavil za vsakega ucenca novo instanco razreda ucenec. Po enakem principu sem dal kater letnik slovenscine sem inicializiral. V odmor.py sem pa dodal neke splosne funkcije, ki jih v glavnem pouk.py programu tudi uporabljamo in ne vsebujejo razredov.
V popoldanski_pouk.py sem pa dodal dva razreda, Robotika, Taborniki.
Kakorkoli, mislim da je koda dovolj jasna za zacetek Very Happy

Osnovni in glavni program je pouk.py
v tej datoteki samo uvazamo ostale pripravljene module, za to skrbi ukaz import.

Koda:
#celotno ucenje

# uvozimo matematiko iz matematike
from matematika import Matematika

# uvozimo slovenscino iz slovenscine
from slovenscina import Slovenscina


#tukaj pa uvozimo to kar bi delali med odmori ter uporabimo funkcije iz tega modula
import odmor as od

mat_1 = Matematika('1')
slo_1 = Slovenscina('1')

#povemo iz katerega modula potegnemo funkcijo (da ne prihaja do zmed in enakih poimenovanj)
od.GremoKPouku()
kvadrat = mat_1.PloscinaKvadrata(13, 25)
print('Ploscina kvadrata je: {}'.format(kvadrat))
krog = mat_1.PloscinaKroga(12.5)
print('Ploscina kroga je {} m2'.format(krog))

od.GremoNaMalco('zdele takoj')

slo_1.IzpisiPoved('Ta suki skafec pusca')
slo_1.IzpisiSamoglasnike()

cifra = od.ZracunajMiNaPamet(12938912, 2137127371)
print('Uf velka cifra, je pa {}'.format(cifra))

# Sedaj lahko ustvarimo se eno instanco razreda, slovenscina 2
print('Gremo se na slovenscino 2')
slo_2 = Slovenscina('2')
slo_2.IzpisiPoved('Ze slovenscina 1 je bla dolgcajt, dvojka bo se slabi....')

od.GremoDomov('raketoplanom')

# uvozimo popoldanske aktivnosti
from popoldanski_pouk import *
# zvezdica * pomeni da uvozimo vse razrede ki jih ta modul vsebuje, lahko uvozimo samo tabornike ali samo robotiko
# primer: from popoldanski_pouk import Robotika

robotika = Robotika()
taborniki = Taborniki()

robotika.NarediRobota('za resevanje rubikove kocke')
taborniki.PostaviOgenj('piramido')


potem je datoteka matematika.py
Koda:
### Matematicni del pythona

#sistemska knjiznica
import math

class Matematika(object):
    """matematicni modul za pouk."""
    def __init__(self, letnik):
        super(Matematika, self).__init__()
        self.letnik = letnik
        print('Ste v {}. letniku matematike'.format(self.letnik))
       
    def PloscinaKroga(self, radius):
        """Funkcija vrne ploscino kroga"""
        return math.pi * math.pow(radius, 2)
   
    def PloscinaKvadrata(self, a, b):
        """Funckija vraca ploscino kvadrata"""
        return a*b


potem imamo razred slovenscina.py
Koda:
### Modul ki skrbi za slovenščino pri pouku

class Slovenscina(object):
    """docstring for Slovenscina."""
    def __init__(self, letnik):
        super(Slovenscina, self).__init__()
        self.letnik = letnik
        print('Ste pri pokuku slovenscine za {}. razred.'.format(self.letnik))
       
    def IzpisiPoved(self, poved):
        """Samo izpise dano poved"""
        print(poved)
   
    def IzpisiSamoglasnike(self):
        """Izpise samoglasnike"""
        print('A, E, I, O, U')



potem imamo datoteko popoldanski_pouk.py
Koda:
### Popoldanske aktivnosti

class Robotika(object):
    """docstring for Robotika."""
    def __init__(self):
        super(Robotika, self).__init__()
        print('Ste pri robotiki.')
   
    def NarediRobota(self, tip_robota):
        """Povemo kterga robota"""
        print('NAredili bomo {} robota.'.format(tip_robota))
       

class Taborniki(object):
    """docstring for Taborniki."""
    def __init__(self):
        super(Taborniki, self).__init__()
        print('Ste pri tabornikih')
   
    def PostaviOgenj(self, tip_ognja):
        """Kter vogn bomo zakurl"""
        print('Zakurl bomo {} ogenj'.format(tip_ognja))
       


potem pa se datoteko odmor.py
Koda:

### Python modul ki skrbi za aktivnosti med odmori in ni cisto lepo struktuiran
def GremoKPouku():
    """Povemo da gremo v solo"""
    print('Bejzmo v solo. Da bomo pametni!')

def GremoNaMalco(cas):
    """Printnemo kdaj gremo na malco"""
    print('Dejmo gremo na malco ob {}.'.format(cas))
   
def GremoDomov(prevoz):
    """Printamo s cim gremo domov"""
    print('Kumarati, gremo dam z {}.'.format(prevoz))
   
def ZracunajMiNaPamet(a, b):
    """Izracunamo nekaj"""
    return a*b
   


PAZI NA IDENTITACIJO
Mr. Green

EDIT: zadeva mora izpisati naslednje
Koda:

Ste v 1. letniku matematike
Ste pri pokuku slovenscine za 1. razred.
Bejzmo v solo. Da bomo pametni!
Ploscina kvadrata je: 325
Ploscina kroga je 490.8738521234052 m2
Dejmo gremo na malco ob zdele takoj.
Ta suki skafec pusca
A, E, I, O, U
Uf velka cifra, je pa 27652102986160352
Gremo se na slovenscino 2
Ste pri pokuku slovenscine za 2. razred.
Ze slovenscina 1 je bla dolgcajt, dvojka bo se slabi....
Kumarati, gremo dam z raketoplanom.
Ste pri robotiki.
Ste pri tabornikih
NAredili bomo za resevanje rubikove kocke robota.
Zakurl bomo piramido ogenj
Press any key to continue . . .


_________________
Robots will steal your job. But that's OK.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Član
Član



Pridružen-a: Pet 13 Feb 2004 10:26
Prispevkov: 3351
Aktiv.: 15.09
Kraj: Dragomer

PrispevekObjavljeno: Pet Sep 10, 2021 11:03 am    Naslov sporočila:   Odgovori s citatom

Uff! Je rekel Winetou in uff pravim jaz.

To zahteva veliko zbranega branja in študiranja, moja glava jih ima 80 in čez. A bom poizkusil.
Kako mi bo uspelo, javim. A to ne bo kmalu. Potrebujem veliko časa.
Vsekakor hvala ti!
VS

_________________
Prepričan sem, da je inteligentnih bitij v vesolju veliko. A ker so inteligenta, se nam nočejo prikazati.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Branez
Moderator
Moderator



Pridružen-a: Pon 14 Apr 2003 7:21
Prispevkov: 7768
Aktiv.: 34.98
Kraj: Koprivnica HR

PrispevekObjavljeno: Pet Sep 10, 2021 12:17 pm    Naslov sporočila: icon_idea Eureka! Eureka! Odgovori s citatom

vilko je napisal/a:
Uff! Je rekel Winetou in uff pravim jaz.
...
In ko bo Vilko to obvladal, bo rekel: hawk! Exclamation Smile
_________________
The true sign of intelligence is not knowledge but imagination.
Creativity is intelligence having fun!

Albert Einstein
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Raspberry Pi sekcija Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 47 dni


Powered by phpBB © 2001, 2005 phpBB Group