Programiranje v Pythonu
Re: Programiranje v Pythonu
Hvala za trud, vendar ta način ne bo dober....ne dela. Tako je, dogaja se le v 1. kvadrantu
Re: Programiranje v Pythonu
No za python je vracanje false cisto ok (ceprav se za to ponavadi uporablja None). Test rabis zunaj, ne notri!
To je ponovljeno, rabis samo dve vrstici. Takole bi slo:
Koda: Izberi vse
t=min(presekIntervalov(a1x, b1x, a2x, b2x))
v=max(presekIntervalov(a1x, b1x, a2x, b2x))
z=min(presekIntervalov(a1y, b1y, a2y, b2y))
y=max(presekIntervalov(a1y, b1y, a2y, b2y))
(t,v)=presekIntervalov(a1x, b1x, a2x, b2x)
(z,y)=presekIntervalov(a1y, b1y, a2y, b2y)
Koda: Izberi vse
x_interval=presekIntervalov(a1x, b1x, a2x, b2x)
y_interval=presekIntervalov(a1y, b1y, a2y, b2y)
if x_interval == False or y_interval == False:
#ne sekata se - vrni kar vsoto ploscin in vsoto obsegov
else:
(t,v)=x_interval
(z,y)=y_interval
#naprej
Re: Programiranje v Pythonu
def pravokotnika(a1x,a1y,b1x,b1y,a2x,a2y,b2x,b2y):
a1x, b1x = min(a1x, b1x), max(a1x, b1x)
a1y, b1y = min(a1y, b1y), max(a1y, b1y)
a2x, b2x = min(a2x, b2x), max(a2x, b2x)
a2y, b2y = min(a2y, b2y), max(a2y, b2y)
obseg1 = 2*(b1x-a1x) + 2*(b1y-a1y)
ploscina1 = (b1x-a1x) * (b1y-a1y)
obseg2 = 2*(b2x-a2x) + 2*(b2y-a2y)
ploscina2 = (b2x-a2x) * (b2y-a2y)
t=min(presekIntervalov(a1x, b1x, a2x, b2x))
v=max(presekIntervalov(a1x, b1x, a2x, b2x))
z=min(presekIntervalov(a1y, b1y, a2y, b2y))
y=max(presekIntervalov(a1y, b1y, a2y, b2y))
(t,v)=presekIntervalov(a1x, b1x, a2x, b2x)
(z,y)=presekIntervalov(a1y, b1y, a2y, b2y)
sirina = v-t
visina = y-z
obsegmali = 2*sirina + 2*visina
ploscinamali = sirina*visina
x_interval=presekIntervalov(a1x, b1x, a2x, b2x)
y_interval=presekIntervalov(a1y, b1y, a2y, b2y)
if x_interval == False or y_interval == False:
return(obseg1+obseg2,ploscina1+ploscina2)
else:
(t,v)=x_interval
(z,y)=y_interval
return(obseg1+obseg2-obsegmali, ploscina1+ploscina2-ploscinamali)
tkole sm napisu pa ni delalo
a1x, b1x = min(a1x, b1x), max(a1x, b1x)
a1y, b1y = min(a1y, b1y), max(a1y, b1y)
a2x, b2x = min(a2x, b2x), max(a2x, b2x)
a2y, b2y = min(a2y, b2y), max(a2y, b2y)
obseg1 = 2*(b1x-a1x) + 2*(b1y-a1y)
ploscina1 = (b1x-a1x) * (b1y-a1y)
obseg2 = 2*(b2x-a2x) + 2*(b2y-a2y)
ploscina2 = (b2x-a2x) * (b2y-a2y)
t=min(presekIntervalov(a1x, b1x, a2x, b2x))
v=max(presekIntervalov(a1x, b1x, a2x, b2x))
z=min(presekIntervalov(a1y, b1y, a2y, b2y))
y=max(presekIntervalov(a1y, b1y, a2y, b2y))
(t,v)=presekIntervalov(a1x, b1x, a2x, b2x)
(z,y)=presekIntervalov(a1y, b1y, a2y, b2y)
sirina = v-t
visina = y-z
obsegmali = 2*sirina + 2*visina
ploscinamali = sirina*visina
x_interval=presekIntervalov(a1x, b1x, a2x, b2x)
y_interval=presekIntervalov(a1y, b1y, a2y, b2y)
if x_interval == False or y_interval == False:
return(obseg1+obseg2,ploscina1+ploscina2)
else:
(t,v)=x_interval
(z,y)=y_interval
return(obseg1+obseg2-obsegmali, ploscina1+ploscina2-ploscinamali)
tkole sm napisu pa ni delalo
Re: Programiranje v Pythonu
Joj kaj delas... tole je zdaj popolnoma odvec:
Saj si to nadomestil z x_interval in y_interval!
To sodi v "else" del if-stavka (to racunamo samo ce presek dejansko obstaja).
Koda: Izberi vse
t=min(presekIntervalov(a1x, b1x, a2x, b2x))
v=max(presekIntervalov(a1x, b1x, a2x, b2x))
z=min(presekIntervalov(a1y, b1y, a2y, b2y))
y=max(presekIntervalov(a1y, b1y, a2y, b2y))
(t,v)=presekIntervalov(a1x, b1x, a2x, b2x)
(z,y)=presekIntervalov(a1y, b1y, a2y, b2y)
Koda: Izberi vse
sirina = v-t
visina = y-z
obsegmali = 2*sirina + 2*visina
ploscinamali = sirina*visina
Re: Programiranje v Pythonu
Joj, vidm ja...mal sm že zmeden, k se tok cajta s tolo nalogco ukvarjam....hvala ti za vso pomoč
Re: Programiranje v Pythonu
Imam dve nalogi za programiranje za kateri nimam pojma kako naj se ju lotim.
1.Sestavite funkcijo prastevilo(n), ki vrne n-to praštevilo.
2.Sestavite funkcijo naslednjePrastevilo(n), ki vrne prvo praštevilo, strogo večje od števila n.
Sestavljeno imam samo funkcijo, ki preveri ali je n praštevilo.
Hvala za kakršno koli pomoč
1.Sestavite funkcijo prastevilo(n), ki vrne n-to praštevilo.
2.Sestavite funkcijo naslednjePrastevilo(n), ki vrne prvo praštevilo, strogo večje od števila n.
Sestavljeno imam samo funkcijo, ki preveri ali je n praštevilo.
Hvala za kakršno koli pomoč
Re: Programiranje v Pythonu
V obeh primerih te do resitve locuje le se zanka. Pri prvi si ustvaris stevec prastevil in vztrajas toliko casa, da jih najdes n:
Pri drugi pa podobno: povecujes dokler ga ne najdes:
Seveda je to najbolj naiven nacin. Po pameti lahko namrec takoj sode (razen 2) preskakujes, ali se lotis z resetom in v celih kosih dolocis prastevila, namesto da stokrat preverjas vsakega posebej.
Koda: Izberi vse
pcount=1
p=2
while pcount<n:
p+=1
if preveriPrastevilo(p):
pcount+=1
return p
Koda: Izberi vse
p=n+1
while not preveriPrastevilo(p):
p+=1
return p
Re: Programiranje v Pythonu
Hvala, dela. Imam pa še eno res enostavno vendar ne vem kako naprej.
Naloga je: Sestavite funkcijo vecjeStevke(n, k), ki vrne vsoto tistih števk štirimestnega števila n, ki so večje od števke k. Če takšnih števk ni, naj funkcija vrne vrednost 0.
Razmišljal sem tako:
def vecjeStevke(n,k):
niz=str(n)
št=str(k)
for i in niz:
if i>št
... potem pa nevem kako bi nadaljeval, vem da morm pol še nazaj convertat v integer
Naloga je: Sestavite funkcijo vecjeStevke(n, k), ki vrne vsoto tistih števk štirimestnega števila n, ki so večje od števke k. Če takšnih števk ni, naj funkcija vrne vrednost 0.
Razmišljal sem tako:
def vecjeStevke(n,k):
niz=str(n)
št=str(k)
for i in niz:
if i>št
... potem pa nevem kako bi nadaljeval, vem da morm pol še nazaj convertat v integer
Re: Programiranje v Pythonu
No pa saj si ze skoraj tam, samo sestejes. lazje je "k" kar podat kot stevilko.
Koda: Izberi vse
def vecjeStevke(n,k):
niz=str(n)
vsota=0
for i in niz:
if int(i)>k:
vsota+=int(i)
return vsota
Re: Programiranje v Pythonu
Pozdravljeni
Imam še dve nalogi, ki mi delata težave.
1.Borzni posrednik se je pohvalil, da je z delnicami dosegel kar 30 % donos. Njegov prijatelj pa se je ob tem na hitro pohvalil s kar 60 % donosom. Borznika sedaj grize nevoščljivost in ga zanima, koliko dobička bi lahko v najboljšem primeru ustvaril s prodajo svojih delnic.
V ta namen sestavite funkcijo kdajProdam(cene), ki ugotovi, kdaj bi borzni posrednik delnice moral prodati, da bi imel kar največji dobiček. Argument cene predstavlja seznam cen delnic po dnevih, začenši z dnevom nakupa. Funkcija naj vrne dan, na katerega se mu delnico najbolj splača prodati, če jo je kupil po ceni, shranjeni v prvem elementu seznama cene. Primer:
>>> kdajProdam([30, 40, 20, 45, 15, 28])
3
2.Borzni posrednik je uspel priti do časovnega stroja, tako da ima podatke o vrednosti delnice za vsak dan za naslednjih nekaj mesecev. Sestavite funkcijo kolikoLahkoZasluzi(cene), ki poišče največji možni zaslužek z enkratnim nakupom in prodajo te delnice s cenami, po dnevih zapisanimi v seznamu cene.
Vrne naj trojico podatkov: dan, na katerega naj posrednik kupi delnice (kot indeks v seznamu), dan, na katerega naj jih proda, ter zaslužek pri tem.
Če z nakupom delnic ne more zaslužiti ničesar (npr. če njihova vrednost neprestano pada), naj funkcija vrne trojico (0, 0, 0). Primer:
>>> kolikoLahkoZasluzi([30, 27, 36, 48, 54, 41, 26, 12, 8, 8])
(1, 4, 27)
Hvala vnaprej
Imam še dve nalogi, ki mi delata težave.
1.Borzni posrednik se je pohvalil, da je z delnicami dosegel kar 30 % donos. Njegov prijatelj pa se je ob tem na hitro pohvalil s kar 60 % donosom. Borznika sedaj grize nevoščljivost in ga zanima, koliko dobička bi lahko v najboljšem primeru ustvaril s prodajo svojih delnic.
V ta namen sestavite funkcijo kdajProdam(cene), ki ugotovi, kdaj bi borzni posrednik delnice moral prodati, da bi imel kar največji dobiček. Argument cene predstavlja seznam cen delnic po dnevih, začenši z dnevom nakupa. Funkcija naj vrne dan, na katerega se mu delnico najbolj splača prodati, če jo je kupil po ceni, shranjeni v prvem elementu seznama cene. Primer:
>>> kdajProdam([30, 40, 20, 45, 15, 28])
3
2.Borzni posrednik je uspel priti do časovnega stroja, tako da ima podatke o vrednosti delnice za vsak dan za naslednjih nekaj mesecev. Sestavite funkcijo kolikoLahkoZasluzi(cene), ki poišče največji možni zaslužek z enkratnim nakupom in prodajo te delnice s cenami, po dnevih zapisanimi v seznamu cene.
Vrne naj trojico podatkov: dan, na katerega naj posrednik kupi delnice (kot indeks v seznamu), dan, na katerega naj jih proda, ter zaslužek pri tem.
Če z nakupom delnic ne more zaslužiti ničesar (npr. če njihova vrednost neprestano pada), naj funkcija vrne trojico (0, 0, 0). Primer:
>>> kolikoLahkoZasluzi([30, 27, 36, 48, 54, 41, 26, 12, 8, 8])
(1, 4, 27)
Hvala vnaprej
Re: Programiranje v Pythonu
1. Tukaj samo poisces maksimalni element, to pa res ni tezko. Obstajajo lepsi nacini, ampak tudi ce se ne zafrkavas z elegantnimi metodami, lahko enostavno izracunas maksimum in potem z zanko pogledas pri katerem indeksu se zgodi.
2. Tukaj potrebujes najvecji skok, pri cemer pa mora biti po vrsti: nakup mora biti pred prodajo. Ce nimas druge ideje, lahko sprobas vse pare:
2. Tukaj potrebujes najvecji skok, pri cemer pa mora biti po vrsti: nakup mora biti pred prodajo. Ce nimas druge ideje, lahko sprobas vse pare:
Koda: Izberi vse
dosedanji_rekord=0
optimalni_i=0
optimalni_j=0
for i in range(length(spisek)):
for j in range(i+1,length(spisek)):
if spisek[j]-spisek[i]>dosedanji_rekord:
dosedanji_rekord=spisek[j]-spisek[i]
optimalni_i=i
optimalni_j=j
return (optimalni_i, optimalni_j,dosedanji_rekord)
Re: Programiranje v Pythonu
Lep pozdrav, eno kratko nalogco iz Pythona bi meu za vprašat.
2) Sestavite funkcijo imamoSestavine(recept, shramba), ki preveri, ali
imamo v shrambi dovolj sestavin za dani recept. Sestavine, ki jih imamo
v shrambi, so predstavljene s slovarjem na enak način kot sestavine v
receptu.
Kako bi zgledala koda?
2) Sestavite funkcijo imamoSestavine(recept, shramba), ki preveri, ali
imamo v shrambi dovolj sestavin za dani recept. Sestavine, ki jih imamo
v shrambi, so predstavljene s slovarjem na enak način kot sestavine v
receptu.
Kako bi zgledala koda?
Re: Programiranje v Pythonu
Moras it po slovarju iz recepta. Sklepam, da imas slovar, kjer za vsako ime vrednost predstavlja kolicino. Potem gre takole:
Na hitro: pogledas, ce sestavina sploh obstaja. In ce obstaja, pogledas ce jo je dosti. Ce prides "ziv" iz te for zanke, ne da bi ze vmes vrnil "false", potem je ocitno vsega dovolj in zunaj zanke lahko vrnes "true".
Koda: Izberi vse
for sestavina,kolicina in recept.iteritems():
if not sestavina in shramba:
return false
if kolicina > shramba[sestavina]:
return false
Re: Programiranje v Pythonu
To mi je jasno.
koda :
def imamoSestavine(recept,shramba):
for sestavina,kolicina in recept.iteritems():
if not sestavina in shramba:
return False
if kolicina > shramba[sestavina]:
return False
else:
return True
To ne dela...AttributeError: 'dict' object has no attribute 'iteritems'
koda :
def imamoSestavine(recept,shramba):
for sestavina,kolicina in recept.iteritems():
if not sestavina in shramba:
return False
if kolicina > shramba[sestavina]:
return False
else:
return True
To ne dela...AttributeError: 'dict' object has no attribute 'iteritems'
Re: Programiranje v Pythonu
Lahko probas "items()". Za iteritems() pravi dokumentacija "New in version 2.2.". Iteritems je bolj pameten, items() samo vrne spisek parov, ampak za tvoj namen je vseeno. Sicer pa imas "true" prezgodaj, preden gres skozi vse elemente.
Koda: Izberi vse
def imamoSestavine(recept,shramba):
for sestavina,kolicina in recept.items():
if not sestavina in shramba:
return False
if kolicina > shramba[sestavina]:
return False
return True