potrebujem pomoč pri nalogah iz programiranja na FMFju. kdorkoli, ki zna karkoli s python-om naj mi prosim pomaga in reši kakšno nalogo iz tu http://tomo.fmf.uni-lj.si/problem_set/119/ in tu http://tomo.fmf.uni-lj.si/problem_set/120/
hvala
UVP _ fmf
Re: UVP _ fmf
No ta forum ni za to, da resujemo namesto tebe. Ce pri resevanju naletis na tezavo, pa lahko kdo pomaga.
Re: UVP _ fmf
saj to je problem, da se sploh ne znam nobene naloge lotiti na žalost
Re: UVP _ fmf
Vsakega programerski problem se loti tako, da najprej poglej kako bi to ti rocno naredil. Recimo pri tistih ribah prva naloga: obrnit moras kljuce in vrednosti v slovarju (s tem da so vrednosti seznami). Recimo eden izmed bolj enostavnih nacinov bi bil, da najprej razpises slovar v seznam parov. Zacnes s tem
{'mušica': {'krap', 'som'}, 'gosenica': {'postrv', 'ščuka'}, 'komar': {'podust', 'som'}}
In potem naredis to:
{('mušica','krap'), ('mušica','som'),('gosenica','postrv'),('gosenica','ščuka'),('komar','podust'),('komar','som')}
To je zdaj simetricen zapis, ki nasteje vse povezave med ribami in vabami. Zdaj samo vrstni red obrnes in zlozis nazaj v slovar.
Ta postopek zdaj prepisi v python.
Pri drugi podnalogi recimo najprej ugotovis, da ne rabis imen ribicev, tako da samo naredis mnozico vab, in potem gledas, ce imajo kaksen skupen element. Tukaj ti izredno prav pridejo vgrajene funkcije za presek mnozic (presek seznamov, in pogledas ce je prazen). Lahko gres tudi z zankami, in pogledas za vsak element posebej ce je notri, in najdes ribe, ki nimajo nobenega skupnega elementa.
Za tiste mnozice poglej dokumentacijo v
http://docs.python.org/2/library/stdtyp ... #frozenset
Torej, splosen namig: sledi postopku, ki bi ga uporabil na papirju, potem je samo stvar prevajanja v kodo, in v teh nalogah je en korak postopka pogosto kar 1-5 vrstic kode.
{'mušica': {'krap', 'som'}, 'gosenica': {'postrv', 'ščuka'}, 'komar': {'podust', 'som'}}
In potem naredis to:
{('mušica','krap'), ('mušica','som'),('gosenica','postrv'),('gosenica','ščuka'),('komar','podust'),('komar','som')}
To je zdaj simetricen zapis, ki nasteje vse povezave med ribami in vabami. Zdaj samo vrstni red obrnes in zlozis nazaj v slovar.
Ta postopek zdaj prepisi v python.
Pri drugi podnalogi recimo najprej ugotovis, da ne rabis imen ribicev, tako da samo naredis mnozico vab, in potem gledas, ce imajo kaksen skupen element. Tukaj ti izredno prav pridejo vgrajene funkcije za presek mnozic (presek seznamov, in pogledas ce je prazen). Lahko gres tudi z zankami, in pogledas za vsak element posebej ce je notri, in najdes ribe, ki nimajo nobenega skupnega elementa.
Za tiste mnozice poglej dokumentacijo v
http://docs.python.org/2/library/stdtyp ... #frozenset
Torej, splosen namig: sledi postopku, ki bi ga uporabil na papirju, potem je samo stvar prevajanja v kodo, in v teh nalogah je en korak postopka pogosto kar 1-5 vrstic kode.
Re: UVP _ fmf
Razredi so malce kompleksni če jih veliko ne uporabljaš zato ti bom naredil malo predavanje o razredih.
==Glej kodo spodaj==
1.oseba=BitniCekin(123):
Z BitniCekin(123) aktiviraš v class-u __init__ funkcijo katera pripiše (123) vrednost lokalni spremenljivki (stanje), ta bo obstajala samo v __init__ funkciji. Z self. rečeš pythonu da bo to moja globalna spremenljivka (Stanje_racuna) v classu, katera se shrani v spremenljivki oseba. Shranjevanje povzročiš tako da rečeš oseba=BitniCekin(123). Vse globalne spremenljivke ki jih kličeš z self.spremenljivka se shranijo v oseba. Globalno spremenljivko vezano na osebo kličeš tako (oseba.Stanje_racuna)
2. oseba.dvig(100):
Ta ukaz povzroči skok v dvig. oseba.dvig povzroči da importaš vse globalne spremenljivke ki so shranjene v spremenljivki oseba, in ravno zaradi tega jih bomo lahko potem spreminjali. Z dvig(100) pa pripišeš vrednost lokalni spremenljivki koliko_dviga.
3. self.Stanje_racuna-=abs(koliko_dviga):
self.Stanje_racuna si lahko zdaj predstavljamo zaradi oseba.dvig kot oseba.Stanje_racuna, nato ji pripišemo novo vrednost katera se bo sharnila v spremenljivki oseba. Podobnost velja za polog funkcijo.
Napisal sem ti še malo kode za boljše razumevanje.
Kot je Aniviller napisal, kodo moraš v procesu pisanja govoriti.
Naprimer:
http://projecteuler.net/problem=2
Fibonacci sequence whose values do not exceed four million, find the sum of valued terms.
Ustvari tabelo x katera bo imela na prvem mestu 0, na drugem 1: x=[0,1]
Nato ponavljaj proces (for i in range(0,infiniti): )dodajaja števil(x.append) v tabeli vsoto zadnjih dveh števil (x+x[i+1]) pri pogoju da največja cifra v tabeli ne sme preseči 10^6(if x+x[i+1]<10**6:), če zadnja cifra preseže 10^6 ustavi rekurzijo (else: break) in seštej vse elemente v ustvarjeni tabeli (print sum(x))
x=[0,1]
for i in range(0,infiniti):
if x+x[i+1]<10**6:
x.append(x+x[i+1])
else:
break
print sum(x)
Če sem kaj nejasnega napisal, kar zajamri.
==Glej kodo spodaj==
1.oseba=BitniCekin(123):
Z BitniCekin(123) aktiviraš v class-u __init__ funkcijo katera pripiše (123) vrednost lokalni spremenljivki (stanje), ta bo obstajala samo v __init__ funkciji. Z self. rečeš pythonu da bo to moja globalna spremenljivka (Stanje_racuna) v classu, katera se shrani v spremenljivki oseba. Shranjevanje povzročiš tako da rečeš oseba=BitniCekin(123). Vse globalne spremenljivke ki jih kličeš z self.spremenljivka se shranijo v oseba. Globalno spremenljivko vezano na osebo kličeš tako (oseba.Stanje_racuna)
2. oseba.dvig(100):
Ta ukaz povzroči skok v dvig. oseba.dvig povzroči da importaš vse globalne spremenljivke ki so shranjene v spremenljivki oseba, in ravno zaradi tega jih bomo lahko potem spreminjali. Z dvig(100) pa pripišeš vrednost lokalni spremenljivki koliko_dviga.
3. self.Stanje_racuna-=abs(koliko_dviga):
self.Stanje_racuna si lahko zdaj predstavljamo zaradi oseba.dvig kot oseba.Stanje_racuna, nato ji pripišemo novo vrednost katera se bo sharnila v spremenljivki oseba. Podobnost velja za polog funkcijo.
Koda: Izberi vse
# -*- coding: utf-8 -*-
class BitniCekin:
def __init__(self,stanje):
self.Stanje_racuna=stanje
def dvig(self, koliko_dviga):
if self.Stanje_racuna>=0:
self.Stanje_racuna-=abs(koliko_dviga)
return True
else:
return False
def polog(self, koliko_pologa):
self.Stanje_racuna+=abs(koliko_pologa)
return self.Stanje_racuna
oseba=BitniCekin(123)
print oseba.Stanje_racuna
print '***************************'
print oseba.dvig(100)
print oseba.Stanje_racuna
print '***************************'
print oseba.polog(50)
Koda: Izberi vse
# -*- coding: utf-8 -*-
class Opis_osebe:
def __init__(self,*args):
self.starost=args[0]
self.glava=args[1]
self.trup=args[2]
self.noge=args[3]
self.ocene=[]
self.denar=0
def Ocene(self,*args):
for i in range(0,len(args)):
self.ocene.append(args[i])
self.Denarno_stanje(args[i])#Skočimo v funkcijo Denarno_stanje z vključenimi globalnimi spremenljivkami
def Denarno_stanje(self, *args):
for i in range(0,len(args)):
self.denar+=args[i]*10
tati=Opis_osebe(19,'Zmešana','Verjetno suh','Kratke')
Aniviller=Opis_osebe(25,'Urejena','Verjetno suh','Hitre verjetno')
print tati.starost
print Aniviller.starost
print '*******************'
tati.Ocene(3,1,2,1,4)
Aniviller.Ocene(10,9,10,10,10)
print tati.ocene
print Aniviller.ocene
print '*******************'
print tati.denar, 'evrov'
print Aniviller.denar, 'evrov'
Naprimer:
http://projecteuler.net/problem=2
Fibonacci sequence whose values do not exceed four million, find the sum of valued terms.
Ustvari tabelo x katera bo imela na prvem mestu 0, na drugem 1: x=[0,1]
Nato ponavljaj proces (for i in range(0,infiniti): )dodajaja števil(x.append) v tabeli vsoto zadnjih dveh števil (x+x[i+1]) pri pogoju da največja cifra v tabeli ne sme preseči 10^6(if x+x[i+1]<10**6:), če zadnja cifra preseže 10^6 ustavi rekurzijo (else: break) in seštej vse elemente v ustvarjeni tabeli (print sum(x))
x=[0,1]
for i in range(0,infiniti):
if x+x[i+1]<10**6:
x.append(x+x[i+1])
else:
break
print sum(x)
Če sem kaj nejasnega napisal, kar zajamri.
Re: UVP _ fmf
Aha pa še tole. Če se slednjih nalog ne znaš lotiti, katere so dokaj specijalne ('slovar','razred'), imaš probleme pri samem razumevanju procesa učenja(ne znaš najti python dokumentacije,tutorijal videje itd...). Probaj najprej reševati najbolj osnovne naloge(http://projecteuler.net/problems), in šele potem rešuj specijalne naloge. Programski jezik ti da samo osnovna orodja s katerimi gradiš program. Brez pomena je da z orodji ki jih ne znaš uporabljati gradiš specijalne programe. Ravno zaradi tega ti predlagam (http://projecteuler.net/problems).
Nauči se branja python dokumentacije! http://docs.python.org/2/tutorial/
Nauči se branja python dokumentacije! http://docs.python.org/2/tutorial/
Re: UVP _ fmf
Hvala Motore. Veš, to je bil samo povzetek pilot-ovih dejanj in Aniviller-jevega truda ter seveda Ribica, ki še pride.Motore napisal/-a:Bargo znova nekaj smeti v tej temi. Prosim moderatorja za izbris bargovega in mojega posta.