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 »

Očitno je biu res to problem, hvala

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a fmf »

Živjo, kako bi pa to rešil?

3) Sestavite funkcijo potrebnoKupiti(recept, shramba), ki vrne slovar
sestavin s pripadajočimi količinami, ki jih moramo še dokupiti, da bomo
lahko skuhali jed po danem receptu.
>>> potrebnoKupiti({'jajca': 3, 'moka': 500}, {'moka': 1000, 'jajca': 6, 'sladkor': 1000})
{}
>>> potrebnoKupiti({'jajca': 3, 'moka': 500}, {'moka': 1000, 'sladkor': 1000})
{'jajca': 3}
>>> potrebnoKupiti({'jajca': 3, 'moka': 500}, {'moka': 100})
{'jajca': 2, 'moka': 400}

Naj začnem s praznim slovarjem?
Hvala

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a Aniviller »

Ja, zacnes s praznim slovarjem, gres po receptu tocno tako kot prej, s tem da v primeru, da shramba sploh nima na zalogi (prvi "false" v prejsnjem programu), dodas v rezultat vnos z isto kolicino kot v receptu, ce pa je na zalogi (drugi "false"), pa izraunas razliko, in ce je negativna, razliko dodas na spisek.

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a fmf »

def potrebnoKupiti(recept,shramba):
slovar={}
for sestavina,kolicina in recept.items():
if not sestavina in shramba:
return slovar["sestavina"]=recept[sestavina]
if kolicina > shramba[sestavina]:
return slovar["sestavina"]=recept[sestavina]-shramba[sestavina]
else:
return slovar
kaj je tukaj narobe?

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a Aniviller »

Sploh ne gres skozi recept, ampak na prvi sestavini klices "return" in skocis iz funkcije. Tukaj filas spisek, tako da moras skozi cel seznam in sele na koncu vrnit rezultat, ko dodas vse kar je treba.

Koda: Izberi vse

def potrebnoKupiti(recept,shramba):
  slovar={}
  for sestavina,kolicina in recept.items():
    if not sestavina in shramba:
      slovar["sestavina"]=recept[sestavina]
    if kolicina > shramba[sestavina]:
      slovar["sestavina"]=recept[sestavina]-shramba[sestavina]
  return slovar

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a fmf »

Tudi to ne dela...if kolicina > shramba[sestavina]:
KeyError: 'jajca'

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a Aniviller »

Ja, pomisli kaj bi lahko to napako povzrocilo. Pravi ti, da nimas jajc. To ti takoj da mislit, da se drugi if stavek testira tudi kadar sestavine (jajc) sploh ni v shrambi. V prejsnjem programu je bil v prvem if stavku "return" in za to ni bilo treba skrbet (ker ce sestavine ni bilo, si takoj izstopil iz funkcije in drugi test ni nikoli prisel na vrsto). Tokrat pa nimas "return" in se for zanka naprej vrti. Tako da moras testirat neenakost samo v primeru, ko sestavina je v shrambi:

Koda: Izberi vse

def potrebnoKupiti(recept,shramba):
  slovar={}
  for sestavina,kolicina in recept.items():
    if not sestavina in shramba:
      slovar["sestavina"]=recept[sestavina]
    elif kolicina > shramba[sestavina]:
      slovar["sestavina"]=recept[sestavina]-shramba[sestavina]
  return slovar

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a fmf »

Aha, razumem...pa moral sem izpustiti narekovaje, torej: slovar[sestavina]

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a Aniviller »

Ja to pa itak, sicer enostavno isces sestavino po imenu "sestavina" :)

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a fmf »

prosim za malo pomoči
Sestavi funkcijo sifriraj(sifra, beseda), ki vrne besedo, zašifrirano
z dano šifro. Predpostavite lahko, da vse črke v besedi nastopajo v
šifri.

Napisal sem:
def sifriraj(sifra,beseda):
for crka in beseda:
return sifra[crka]
Vem, da to zašifrira le prvo črko...kako naj to popravim?

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a Aniviller »

Ce spet vrnes iz funkcije z "return" pri prvem obratu zanke.

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a fmf »

Kam premaknem return?

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a Aniviller »

Na konec, ko bos rezultat funkcije pripravljen.

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a fmf »

Zdej pa res ne razumem:).

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a Aniviller »

return konca izvajanje funkcije in vrne rezultat. Najprej moras poracunat rezultat. Kar hoces, je sestavit rezultat, in ga vrnit ko je pripravljen.

Koda: Izberi vse

def sifriraj(sifra,beseda):
  sifrirano=""
  for crka in beseda:
    sifrirano+=sifra[crka]
  return sifrirano

Odgovori