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 »

def kam_pa_kam(ukazi):
prevod={'F': 0, 'L': 1, 'B': 2, 'R': 3} #no lahko to tudi z if stavki, ki so lahko notri, ali pa v pomožni funkciji
i=0
x,y=0,0
smer=0 #na začetku gre gor
for i in ukazi:
smer += prevod
if smer==0:
y+=1
elif smer == 1:
x +=-1
elif smer==3 :
x += 1
else :
y += -1
return (x,y)


Samo to ni uredu, da smeri prištevam x in y....smer je samo ena spremenljivka kot ste jo vi označili. Bi dau kodo v verbatim okolju, samo ne prime nekaj :)

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a Aniviller »

Saj ne mešaš x in y s smerjo. Smer je oznaka smeri neba (v bistvu kot v enotah 90 stopinj), in glede na smer neba se odločiš ali se premakneš v x ali v y smer. Izgleda v redu. Tisti "code" okolje meni čisto lepo deluje.

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a fmf »

očitno je še neka napaka...

- Izraz kam_pa_kam('LFF') vrne (-3, 0) namesto (-2, 0) (numerična napaka).
- Izraz kam_pa_kam('RFRFRFRF') vrne (2, -6) namesto (0, 0) (numerična napaka).
- Izraz kam_pa_kam('FRFLFRFLFRFLFRF') vrne (2, -11) namesto (4, 4) (numerična napaka).

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a Aniviller »

Ja seveda, jaz sem ti samo glavno idejo narekoval... manjka ti modulo 4, in pa podrobno branje navodil, ki ti pove, da L in R samo vrtita in sploh ne premakneta želve. V tem primeru nekako izgubi smisel tisto prevajanje in seštevanje smeri, saj imaš samo dva primera, ni več kaj poenostavit... in ostaneš na temle:

Koda: Izberi vse

def kam_pa_kam(ukazi):
    x,y = 0,0
    smer=0 #najprej gor
    for i in ukazi:
        #dajmo si kar v naprej naprej/nazaj določit
        korak=1
        if i == 'L':
            smer = (smer+1)%4
            continue #ce se vrtimo, ne delamo korakov
        elif i == 'R':
            smer = (smer-1)%4
            continue #ce se vrtimo, ne delamo korakov
        elif i== 'F':
            korak=1
        elif i== 'B':
            korak=-1
        else:
            print("ukaz "+i+" nima pomena\n")
            continue
        #sicer pa hodimo
        if smer == 0:
            y += korak
        elif smer == 1:
            x -= korak
        elif smer == 2:
            y -= korak
        else:
            x += korak
    return (x,y)

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a fmf »

Točno ja...hvala:).

eno bi še imel iz Pythona, če lahko(3.naloga)

Ljubezen nam je vsem v pogubo
#
# Socialno omrežje zaljubljenosti podamo s slovarjem, ki ime osebe
# preslika v množico vseh, v katere je oseba zaljubljena (ena oseba
# je lahko zaljubljena v več oseb). Na primer, slovar
#
# s = {'Ana' : {'Bine','Cene'},
# 'Bine' : set(),
# 'Cene' : {'Bine'},
# 'Davorka' : {'Davorka'},
# 'Eva' : {'Bine'}}
#
# nam pove, da je Ana zaljubljena v Bineta in Cenete, Bine ni
# zaljubljen, Cene ljubi Bineta, Davorka samo sebe in Eva Bineta.
#######################################################################@@#




##################################################################@000012#
# 1) Sestavite funkcijo narcisoidi(d), ki sprejme slovar zaljubljenih
# in vrne _monžico_ tistih, ki ljubijo same sebe.
##################################################################000012@#
def narcisoidi(d):
narcisi=set()
for clovek in d.keys():
if clovek in d[clovek]:
narcisi.add(clovek)
return narcisi







##################################################################@000013#
# 2) Sestavite funkcijo ljubljeni(d), ki sprejme slovar zaljubljenih
# in vrne _množico_ tistih, ki so ljubljeni.
##################################################################000013@#
def ljubljeni(d):
zacasni=set()
for clovek in d.keys():
zacasni=set.union(zacasni, d[clovek])
return zacasni




##################################################################@000014#
# 3) Sestavite funkcijo pari(d), ki sprejme slovar zaljubljenih
# in vrne _množico_ vseh parov, ki so srečno ljubljeni. Vsak
# par naj se pojavi samo enkrat in sicer tako, da je sta zaljubljenca
# našteta po abecedi. Na primer, če sta Ana in Bine zaljubljena,
# dodamo par ('Ana','Bine').
##################################################################000014

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a Aniviller »

A nisva to dala skozi že par mesecev nazaj? :D

Na najbolj naiven način greš lahko kar po vseh parih in pogledaš če se ujemata. Za ta namen je namesto kar surovega iteriranja (for človek in spisek) lažje it kar po indeksih. Jaz bi si najprej naredil seznam ljudi:
ljudje=s.keys()
ljudje.sort() #če tu sortiraš, je vrstni red potem že v redu
in potem

Koda: Izberi vse

for i in range(len(ljudje)):
  for j in range(i+1,len(ljudje)):
    if ljudje[i] in s[ljudje[j]] and ljudje[j] in s[ljudje[i]]:
      #izpis

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a fmf »

Ok, hvala...za to funkcijo sort nisem vedel...

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a Aniviller »

Python je od programskih jezikov najbližje temu, da mu samo rečeš kaj hočeš in se zgodi. Če si zamisliš nek algoritem in napišeš kar misliš, marsikdaj že kar dela. Pythonu rečejo tudi "executable pseudo-code" :) Sicer pa seveda google odgovori v eni potezi če nekaj iščeš. stackoverflow.com je ponavadi med prvimi zadetki.

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a fmf »

Ja, sej google je skrajna varianta, ponavadi ni podobnih primerov.
Pri tej 3. nalogi je tale vrstica mal čudna: if ljudje in d[ljudje[j]] and ljudje[j] in d[ljudje]
Ključi slovarja ne podpirajo indeksiranja...

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a Aniviller »

Ja, sej google je skrajna varianta, ponavadi ni podobnih primerov.
Sej nisem mislil da celo nalogo googlaš. Googlaš kar rabiš. Recimo da rabiš sort. Ali da rabiš način, kako dobit ključe slovarja ali kako iterirat po spisku, obrnit vrstni red seznama,... v tem stilu.

Sicer tista vrstica... ne bi smela bit problem, če si prav predstavljam. "ljudje" bi moral biti list, ker ga dobiš iz .keys(), in bi moral podpirat indeksiranje, če ne ga pa lahko narediš z list(ljudje) če si v dvomih. Po drugi strani mora ljudje[j] dat ven ime človeka, ki bi ga moral slovar d[] sprejet kot argument. In potem bi operator "in" moral preverit, če je stvar notri (pa naj bo d[človek] "list" ali pa "set"). Če si v dvomih, lahko še tega pretvoriš v set ali list eksplicitno. Če nič ne dela, si naredi print(ljudje) in print(ljudje) da vidiš kje je problem. Mogoče so tipi napačni.

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a fmf »

Ja, sem poskusil (list(d.keys()). Na koncu dam return ljudje....
Samo ta funkcija ne bo vrnila parov, kot je zahtevano v nalogi

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a Aniviller »

fmf napisal/-a:Ja, sem poskusil (list(d.keys()). Na koncu dam return ljudje....
Samo ta funkcija ne bo vrnila parov, kot je zahtevano v nalogi
Ja ok, tega ti nisem pisal, nekam si jih moraš beležit ja. Ko najdeš par, dodaš (ljudje,ljudje[j]) v nek seznam, ki ga počasi gradiš in na koncu vrneš.

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a fmf »

zdej sem pa že blizu....

Koda: Izberi vse

def pari(d):
    ljudje=list(d.keys())
    sorted(ljudje)
    seznam=[]
    for i in range(len(ljudje)):
      for j in range(i+1,len(ljudje)):
        if ljudje[i] in d[ljudje[j]] and ljudje[j] in d[ljudje[i]]:
            seznam.append((ljudje[i],ljudje[j]))
            return seznam
return sem verjetno narobe zamaknil?

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a Aniviller »

ZELO narobe zamaknil, takoj ti vrne ko najde prvi par. Izven "for" zank mora bit.

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

Re: Programiranje v Pythonu

Odgovor Napisal/-a fmf »

Kako naj zamaknem retrun, da bo izven for zank?

Odgovori