Programiranje v Pythonu
Re: Programiranje v Pythonu
Ne deluje. Kar koli na ta način mi ne dela. Sem probala tudi za string pa ne deluje. Ker program mora vse ostale znake ignorirat.
Re: Programiranje v Pythonu
Aja saj res, ti imaš string in tukaj dobiš kar error če ni število (int() se ne pritoži, če mu daš realno število, ampak ga samo zaokroži, če pa mu daš besedilo, pa zateži...). Ampak to lahko porabiš sebi v prid. Uporabiš "try" varianto, in ignoriraš kadar je error.
Sem pomislil, če obstaja še kakšna pametna funkcija, ki bi to testirala sama po sebi, ampak sodeč po temle
http://stackoverflow.com/questions/1265 ... try-except
je tole zgoraj kar edini pregleden način.
Koda: Izberi vse
def preberiDat(dat='dn1.txt'):
with open(dat) as f:
vrstice = f.read()
vrstice=vrstice.split()
seznam = []
for i in vrstice:
try:
stevilo=int(i)
seznam.append(stevilo)
except ValueError:
continue #ignoriramo
return seznam
http://stackoverflow.com/questions/1265 ... try-except
je tole zgoraj kar edini pregleden način.
Re: Programiranje v Pythonu
Jaaaa dela. uffff joj na to pa sploh nisem pomoslila, pa tako enostavno je. Najlepša hvala za pomoč.
Re: Programiranje v Pythonu
Pozdravljeni!
Imam majhno težavo pri programiranju naloge. In sicer moram sestaviti algoritem za urejanje števil v seznamu od najmanjšega do največjega. Izbrala sem si urejanje z mehurčki. Napisati moram dva algoritma. Enega, ki spreminja dani seznam in drugega, ki ustvari nov urejen seznam,dani pa ostane nespremenjen. No prvo algoritem sem napisala brez težav. Pri drugem pa se mi je zataknilo.
To je koda prvega algoritma:
Imam majhno težavo pri programiranju naloge. In sicer moram sestaviti algoritem za urejanje števil v seznamu od najmanjšega do največjega. Izbrala sem si urejanje z mehurčki. Napisati moram dva algoritma. Enega, ki spreminja dani seznam in drugega, ki ustvari nov urejen seznam,dani pa ostane nespremenjen. No prvo algoritem sem napisala brez težav. Pri drugem pa se mi je zataknilo.
To je koda prvega algoritma:
Koda: Izberi vse
def urejanje(seznam):
zamenjava = True
while zamenjava:
zamenjava = False
for i in range(0,len(seznam)-1):
if seznam[i] > seznam[i+1]:
zamenjava = True
seznam[i], seznam [i+1] = seznam[i+1], seznam[i]
return seznam
Re: Programiranje v Pythonu
No, če ne drugega bi se dalo samo kopirat in tole klicat. Ampak tam je bolj tipični primer urejanje z vstavljanjem. Vsakič najdeš najmanjšega, ga vstaviš v drugi seznam, najdeš naslednjega najmanjšega, vendar večjega od zadnjega vstavljenega v drugem seznamu...
Jasno ne tale ne mehurčki ne spadata med resne algoritme (oba imata zahtevnost n^2).
Jasno ne tale ne mehurčki ne spadata med resne algoritme (oba imata zahtevnost n^2).
Re: Programiranje v Pythonu
Jaz potrebujem ta isti algoritem,torej urejanje z mehurčki,vendar napisan tako, da bo ustvaril in vrnil nov urejen seznam,dani seznam pa se ne bo spremenil. Ne razumem tega s klicanjem. Vendar pa bi rada algoritem spremenila/dopolnila,da bi delal tudi na drugi način ampak ne vem kako.
Re: Programiranje v Pythonu
Ja najbolj direkten način za to je kar, da na začetku rečeš
novseznam=seznam
delaš vmes z novim in na koncu return novseznam
novseznam=seznam
delaš vmes z novim in na koncu return novseznam
Re: Programiranje v Pythonu
To ni vredu,saj na koncu dobim urejen tudi prvotni seznam,ta pa bi moral biti nespremenjen.
Re: Programiranje v Pythonu
Aja saj res, Python
novseznam = copy.deepcopy(seznam)
"copy" modul ima posebej funkcijo, ki dejansko naredi nov array, ne pa samo naredi link na starega.
novseznam = copy.deepcopy(seznam)
"copy" modul ima posebej funkcijo, ki dejansko naredi nov array, ne pa samo naredi link na starega.
Re: Programiranje v Pythonu
Tega se pa nebi spomnila nikoli. Bi se mogoče dalo tudi kako drugače?Jaz sem razmišljala nekaj v tej smeri, da ko je izpolnjen if stavek, da elementa dodamo v nov seznam v obratnem vrstnem redu(se pravi najprej manjšega potem večjega) pa ne gre skozi.. :/
Re: Programiranje v Pythonu
Ja potem si kmalu nazaj na insertion sort, ki je naraven kadar vstavljaš v prazno tabelo... pri večini sort algoritmih ti je to, da moraš original ohranjat, pišeš pa drugam, samo v breme in se torej tega hitro odkrižaš tako, da narediš kopijo.
V eni potezi jasno ne bo šlo - po prvi potezi imaš že v drugem arrayu, potem moraš pa itak tam nadaljevat kot da ni nič. V najboljših algoritmih moraš ~log(n)-krat skozi celo stvar, in ko je delno sortirano, si z originalom ne moreš več nič pomagat. Pri mehurčkih greš n-krat skozi (lahko sicer vsakič testiraš en par manj, ker vsakič je zadnji že na pravem mestu, ampak to samo razpolovi število primerjav), in po prvi potezi ni še nič kaj podobno pravemu rezultatu, nadaljevanje bi pa spet moralo biti tako kot zdaj. Tako da je najbolj smiselno kar naredit kopijo in nadaljevat.
V eni potezi jasno ne bo šlo - po prvi potezi imaš že v drugem arrayu, potem moraš pa itak tam nadaljevat kot da ni nič. V najboljših algoritmih moraš ~log(n)-krat skozi celo stvar, in ko je delno sortirano, si z originalom ne moreš več nič pomagat. Pri mehurčkih greš n-krat skozi (lahko sicer vsakič testiraš en par manj, ker vsakič je zadnji že na pravem mestu, ampak to samo razpolovi število primerjav), in po prvi potezi ni še nič kaj podobno pravemu rezultatu, nadaljevanje bi pa spet moralo biti tako kot zdaj. Tako da je najbolj smiselno kar naredit kopijo in nadaljevat.
Re: Programiranje v Pythonu
Kaj je pri tej rešitvi naloge narobe, prosim za malce pomoči...
MiniLogo
#
# MiniLogo je okrnjena izvedba programskega jezika Logo, ki premore le
# štiri ukaze: F, B, R in L. S temi štirimi ukazi upravljamo
# želvo. Želva se nahaja v ravnini, ki je opremljena z običajnim
# koordinatnim sistemom (prva koordinata narašča proti desni, druga
# koordinata pa narašča navzgor). Želva se na začetku nahaja v točki
# $(0, 0)$ in gleda navzgor (proti "severu"). Z ukazom F želvi povemo,
# naj naredi en korak naprej (v tisti smeri, kamor je trenutno obrnjena).
# Z ukazom B povemo, naj naredi želva korak nazaj. Ukaz R pomeni, naj
# se želva zavrti v desno (tj. v smeri urinega kazalca) za 90°. Ukaz L pa
# pomeni, naj se želva zavrti za 90° v levo (tj. v nasprotni smeri urinega
# kazalca).
#
# Program, ki upravlja z želvo, je torej niz v katerem nastopajo zgornji
# štirje znaki. Primer: 'FFLFRFRFFFLBRBLBBLF'.
#######################################################################@@#
##################################################################@001194#
# 1) Sestavite funkcijo kam_pa_kam(ukazi), ki kot argument dobi niz ukazi.
# Ta niz vsebuje ukaze za želvo, kot je opisano zgoraj. Funkcija naj izračuna
# in vrne koordinati tiste točke, kjer se želva ustavi.
#
# >>> kam_pa_kam('LFF')
# (-2, 0)
# >>> kam_pa_kam('FRFLFRFLFRFLFRF')
# (4, 4)
##################################################################001194@#
def kam_pa_kam(ukazi):
i=0
x,y = 0,0
for i in ukazi:
if i== 'F':
y += 1
elif i == 'R':
x += 1
elif i =='L' :
x += -1
else :
y += -1
return (x,y)
MiniLogo
#
# MiniLogo je okrnjena izvedba programskega jezika Logo, ki premore le
# štiri ukaze: F, B, R in L. S temi štirimi ukazi upravljamo
# želvo. Želva se nahaja v ravnini, ki je opremljena z običajnim
# koordinatnim sistemom (prva koordinata narašča proti desni, druga
# koordinata pa narašča navzgor). Želva se na začetku nahaja v točki
# $(0, 0)$ in gleda navzgor (proti "severu"). Z ukazom F želvi povemo,
# naj naredi en korak naprej (v tisti smeri, kamor je trenutno obrnjena).
# Z ukazom B povemo, naj naredi želva korak nazaj. Ukaz R pomeni, naj
# se želva zavrti v desno (tj. v smeri urinega kazalca) za 90°. Ukaz L pa
# pomeni, naj se želva zavrti za 90° v levo (tj. v nasprotni smeri urinega
# kazalca).
#
# Program, ki upravlja z želvo, je torej niz v katerem nastopajo zgornji
# štirje znaki. Primer: 'FFLFRFRFFFLBRBLBBLF'.
#######################################################################@@#
##################################################################@001194#
# 1) Sestavite funkcijo kam_pa_kam(ukazi), ki kot argument dobi niz ukazi.
# Ta niz vsebuje ukaze za želvo, kot je opisano zgoraj. Funkcija naj izračuna
# in vrne koordinati tiste točke, kjer se želva ustavi.
#
# >>> kam_pa_kam('LFF')
# (-2, 0)
# >>> kam_pa_kam('FRFLFRFLFRFLFRF')
# (4, 4)
##################################################################001194@#
def kam_pa_kam(ukazi):
i=0
x,y = 0,0
for i in ukazi:
if i== 'F':
y += 1
elif i == 'R':
x += 1
elif i =='L' :
x += -1
else :
y += -1
return (x,y)
Re: Programiranje v Pythonu
Ti se obračaš glede na absolutni koordinatni sistem (glede na kompas), FBRL pa se nanašajo glede na želvo! Načinov je več, lahko imaš tudi blazno grde if stavke... predlagam recimo tole, bo še najlažje: prevedeš FBRL v kote, podane v četrtinkah polnega kroga (F=0, L=1, B=2, R=3), spraviš trenutno smer želve, in potem je nova smer želve vsota stare smeri in ukaza (po modulu 4). If-stavek za premik pa imaš zdaj namesto po črkah kar po številkah...
Re: Programiranje v Pythonu
Kako pa zgleda koda pri vaši rešitvi?
Re: Programiranje v Pythonu
Hehe, misliš, da sem kodo pisal? Ma nekaj v tem stilu, recimo da prevajanje v številko narediš kar s slovarčkom...
Koda: Izberi vse
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[i]
if smer==0:
y+=1
in tako dalje...