Stran 1 od 1

UVP _ fmf

Objavljeno: 27.8.2013 22:17
Napisal/-a tati
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

Re: UVP _ fmf

Objavljeno: 27.8.2013 22:30
Napisal/-a Aniviller
No ta forum ni za to, da resujemo namesto tebe. Ce pri resevanju naletis na tezavo, pa lahko kdo pomaga.

Re: UVP _ fmf

Objavljeno: 27.8.2013 22:32
Napisal/-a tati
saj to je problem, da se sploh ne znam nobene naloge lotiti :( na žalost

Re: UVP _ fmf

Objavljeno: 27.8.2013 23:03
Napisal/-a Aniviller
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.

Re: UVP _ fmf

Objavljeno: 28.8.2013 13:15
Napisal/-a pilot
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.

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)
Napisal sem ti še malo kode za boljše razumevanje. :D

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'
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. :wink:

Re: UVP _ fmf

Objavljeno: 28.8.2013 14:02
Napisal/-a pilot
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/

Re: UVP _ fmf

Objavljeno: 2.5.2016 10:59
Napisal/-a bargo
Motore napisal/-a:Bargo znova nekaj smeti v tej temi. Prosim moderatorja za izbris bargovega in mojega posta.
Hvala Motore. Veš, to je bil samo povzetek pilot-ovih dejanj in Aniviller-jevega truda ter seveda Ribica, ki še pride. :D