Programiranje v Pythonu

Ko tudi učitelj ne more pomagati...
Odgovori
fmf
Prispevkov: 210
Pridružen: 28.6.2012 16:02

Re: Programiranje v Pythonu

Odgovor Napisal/-a fmf »

Hvala za trud, vendar ta način ne bo dober....ne dela. Tako je, dogaja se le v 1. kvadrantu

Uporabniški avatar
Aniviller
Prispevkov: 7263
Pridružen: 15.11.2004 18:16

Re: Programiranje v Pythonu

Odgovor Napisal/-a Aniviller »

No za python je vracanje false cisto ok (ceprav se za to ponavadi uporablja None). Test rabis zunaj, ne notri!

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)
To je ponovljeno, rabis samo dve vrstici. Takole bi slo:

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

fmf
Prispevkov: 210
Pridružen: 28.6.2012 16:02

Re: Programiranje v Pythonu

Odgovor Napisal/-a fmf »

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

Uporabniški avatar
Aniviller
Prispevkov: 7263
Pridružen: 15.11.2004 18:16

Re: Programiranje v Pythonu

Odgovor Napisal/-a Aniviller »

Joj kaj delas... tole je zdaj popolnoma odvec:

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)
Saj si to nadomestil z x_interval in y_interval!

Koda: Izberi vse

sirina = v-t
visina = y-z


obsegmali = 2*sirina + 2*visina
ploscinamali = sirina*visina
To sodi v "else" del if-stavka (to racunamo samo ce presek dejansko obstaja).

fmf
Prispevkov: 210
Pridružen: 28.6.2012 16:02

Re: Programiranje v Pythonu

Odgovor Napisal/-a fmf »

Joj, vidm ja...mal sm že zmeden, k se tok cajta s tolo nalogco ukvarjam....hvala ti za vso pomoč

anavotm
Prispevkov: 89
Pridružen: 12.1.2012 12:01

Re: Programiranje v Pythonu

Odgovor Napisal/-a anavotm »

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č

Uporabniški avatar
Aniviller
Prispevkov: 7263
Pridružen: 15.11.2004 18:16

Re: Programiranje v Pythonu

Odgovor Napisal/-a Aniviller »

V obeh primerih te do resitve locuje le se zanka. Pri prvi si ustvaris stevec prastevil in vztrajas toliko casa, da jih najdes n:

Koda: Izberi vse

pcount=1
p=2
while pcount<n:
  p+=1
  if preveriPrastevilo(p):
    pcount+=1
return p
Pri drugi pa podobno: povecujes dokler ga ne najdes:

Koda: Izberi vse

p=n+1
while not preveriPrastevilo(p):
  p+=1
return p
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.

anavotm
Prispevkov: 89
Pridružen: 12.1.2012 12:01

Re: Programiranje v Pythonu

Odgovor Napisal/-a anavotm »

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

Uporabniški avatar
Aniviller
Prispevkov: 7263
Pridružen: 15.11.2004 18:16

Re: Programiranje v Pythonu

Odgovor Napisal/-a Aniviller »

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

anavotm
Prispevkov: 89
Pridružen: 12.1.2012 12:01

Re: Programiranje v Pythonu

Odgovor Napisal/-a anavotm »

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

Uporabniški avatar
Aniviller
Prispevkov: 7263
Pridružen: 15.11.2004 18:16

Re: Programiranje v Pythonu

Odgovor Napisal/-a Aniviller »

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:

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)

fmf
Prispevkov: 210
Pridružen: 28.6.2012 16:02

Re: Programiranje v Pythonu

Odgovor Napisal/-a fmf »

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?

Uporabniški avatar
Aniviller
Prispevkov: 7263
Pridružen: 15.11.2004 18:16

Re: Programiranje v Pythonu

Odgovor Napisal/-a Aniviller »

Moras it po slovarju iz recepta. Sklepam, da imas slovar, kjer za vsako ime vrednost predstavlja kolicino. Potem gre takole:

Koda: Izberi vse

for sestavina,kolicina in recept.iteritems():
  if not sestavina in shramba:
    return false
  if kolicina > shramba[sestavina]:
    return false
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".

fmf
Prispevkov: 210
Pridružen: 28.6.2012 16:02

Re: Programiranje v Pythonu

Odgovor Napisal/-a fmf »

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'

Uporabniški avatar
Aniviller
Prispevkov: 7263
Pridružen: 15.11.2004 18:16

Re: Programiranje v Pythonu

Odgovor Napisal/-a Aniviller »

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

Odgovori