Forum » Programiranje » Python - problem
Python - problem
slevin ::
Mam en problem pri izdelavi naloge v Pythonu, zato prosim za pomoč.
Naloga gre takole:
Radi bi generirali 100 sluˇcajnih ˇstevil porazdeljenih po normalni porazdelitvi
N(μ, standard. odklon). μ in st.odkl. naj se pred tem izbereta sluˇcajno iz vrednosti {1, 2, 3}.
100 zgeneriranih ˇstevil bi radi zapisali v neko .txt datoteko, jih iz datoteke prebrali,
uredili po velikosti in vse skupaj zapisali v neko drugo datoteko .txt. Na
koncu bi radi ˇse izpisali, koliko zgeneriranih ˇstevil je padlo ven 95% intervala
zaupanja za normalno porazdelitev N(μ, st.odkl.).
Da implementirate zgornji problem, napiˇsite naslednje funkcije (ˇce ˇzelite,
lahko problem razbijete tudi na veˇc funkcij!):
1. izbira mu sigma — funkcija izbere iz mnoˇzice {1, 2, 3} sluˇcajni vrednosti
za μ in st.odkl. in ju vrne kot n-terko.
2. generiranje stevil — funkcija generira 100 sluˇcajnih realnih ˇstevil iz
normalne (oziroma Gaussove v Pythonu) porazdelitve N(μ,st.odkl.) (μ in st.odkl. podamo kot vhodna parametra) in jih izpiˇse (vsako ˇstevilo v svoji vrsti)
na zunanjo tekstovno datoteko (na 2 decimalki natanˇcno). Ime datoteke
podate kot vhodni argument. Funkcija ne vrne niˇcesar.
3. preberi_dat — funkcija prebere ˇstevila iz datoteke, katere ime je podano
kot vhodni argument, jih pretvori iz stringov v ˇstevila in jih vrne zapisane
v seznam
4. sort stevil — funkcija sortira ˇstevila v seznamu, ki je podan kot vhodni
argument in jih izpiˇse na zunanjo datoteko, katere ime je podano kot
drugi vhodni argument
5. st izven intervala — funkcija izraˇcuna in vrne ˇstevilo ˇstevil v seznamu
(vhodni argument), ki leˇzijo izven mej, ki sta podani kot vhodna argumenta.
Primer:
seznam = [1,2,3,4,5]
sp_meja = 2
zg_meja = 3
st_stevil = st_izven_intervala(seznam, sp_meja, zg_meja)
# st_stevil dobi vrednost 3 (torej stevila 1,4 in 5)
6. glavna funkcija — funkcija je v bistvu glavni program in se naj pokli
ˇce v primeru, ˇce poganjamo modul sam zase. Funkcija kliˇce vse funkcije,
ki ste jih napisali zgoraj v logiˇcno pravilnem zaporedju tako, da
na koncu izpiˇse, iz katere normalne porazdelitve so bila generana ˇstevila
in izraˇcuna ter izpiˇse ˇstevilo sluˇcajno generiranih realniˇh ˇstevil, ki leˇzijo
izven 95% intervala — torej izven intervala [μ − 1.96 × st.odkl. ,μ + 1.96 × st.odkl.].
Primer:
glavna_funkcija()
Stevila so bila generirana iz porazdelitve N(1,2).
Izven 95 % intervala zaupanja lezi
6 stevil iz datoteke gen_stevila.txt.
______________________
V bistu znam samo 3. nalogo:
def preberi_dat(ime_dat):
----f = open(ime_dat, "r")
----s = []
----for line in f:
--------s.append(float(line))
----return s
Lepo prosim, če mi pomaga nekdo, ki to zna.
Hvala
Naloga gre takole:
Radi bi generirali 100 sluˇcajnih ˇstevil porazdeljenih po normalni porazdelitvi
N(μ, standard. odklon). μ in st.odkl. naj se pred tem izbereta sluˇcajno iz vrednosti {1, 2, 3}.
100 zgeneriranih ˇstevil bi radi zapisali v neko .txt datoteko, jih iz datoteke prebrali,
uredili po velikosti in vse skupaj zapisali v neko drugo datoteko .txt. Na
koncu bi radi ˇse izpisali, koliko zgeneriranih ˇstevil je padlo ven 95% intervala
zaupanja za normalno porazdelitev N(μ, st.odkl.).
Da implementirate zgornji problem, napiˇsite naslednje funkcije (ˇce ˇzelite,
lahko problem razbijete tudi na veˇc funkcij!):
1. izbira mu sigma — funkcija izbere iz mnoˇzice {1, 2, 3} sluˇcajni vrednosti
za μ in st.odkl. in ju vrne kot n-terko.
2. generiranje stevil — funkcija generira 100 sluˇcajnih realnih ˇstevil iz
normalne (oziroma Gaussove v Pythonu) porazdelitve N(μ,st.odkl.) (μ in st.odkl. podamo kot vhodna parametra) in jih izpiˇse (vsako ˇstevilo v svoji vrsti)
na zunanjo tekstovno datoteko (na 2 decimalki natanˇcno). Ime datoteke
podate kot vhodni argument. Funkcija ne vrne niˇcesar.
3. preberi_dat — funkcija prebere ˇstevila iz datoteke, katere ime je podano
kot vhodni argument, jih pretvori iz stringov v ˇstevila in jih vrne zapisane
v seznam
4. sort stevil — funkcija sortira ˇstevila v seznamu, ki je podan kot vhodni
argument in jih izpiˇse na zunanjo datoteko, katere ime je podano kot
drugi vhodni argument
5. st izven intervala — funkcija izraˇcuna in vrne ˇstevilo ˇstevil v seznamu
(vhodni argument), ki leˇzijo izven mej, ki sta podani kot vhodna argumenta.
Primer:
seznam = [1,2,3,4,5]
sp_meja = 2
zg_meja = 3
st_stevil = st_izven_intervala(seznam, sp_meja, zg_meja)
# st_stevil dobi vrednost 3 (torej stevila 1,4 in 5)
6. glavna funkcija — funkcija je v bistvu glavni program in se naj pokli
ˇce v primeru, ˇce poganjamo modul sam zase. Funkcija kliˇce vse funkcije,
ki ste jih napisali zgoraj v logiˇcno pravilnem zaporedju tako, da
na koncu izpiˇse, iz katere normalne porazdelitve so bila generana ˇstevila
in izraˇcuna ter izpiˇse ˇstevilo sluˇcajno generiranih realniˇh ˇstevil, ki leˇzijo
izven 95% intervala — torej izven intervala [μ − 1.96 × st.odkl. ,μ + 1.96 × st.odkl.].
Primer:
glavna_funkcija()
Stevila so bila generirana iz porazdelitve N(1,2).
Izven 95 % intervala zaupanja lezi
6 stevil iz datoteke gen_stevila.txt.
______________________
V bistu znam samo 3. nalogo:
def preberi_dat(ime_dat):
----f = open(ime_dat, "r")
----s = []
----for line in f:
--------s.append(float(line))
----return s
Lepo prosim, če mi pomaga nekdo, ki to zna.
Hvala
- spremenil: slevin ()
pietro ::
Resitev (shranis v naloga.py):
________________________________________________________________________________
import random
import sys
import string
output = open(sys.argv[1],'w')
#iz mnozice {1,2,3} izberemo vrednost za deviacijo in srednjo vrednost
def deviacija(n=4):
....return random.randrange(1,n)
def srednja_vrednost(n=4):
....return random.randrange(1,n)
#generiramo mnozico 100 normalno porazdeljenih stevil in jih dodajamo v listo *numbers*
def generator(vel=100):
....numbers = []
....dev = deviacija(4)
....mean = srednja_vrednost(4)
....for i in range(vel):
........numbers.append(random.gauss(mean,dev))
....return numbers
def output_writer():
....for stevilo in generator(100):
........stevilka = '%f' % (stevilo)
........output.write(stevilka+'\n')
....output.close()
def branje():
....data = open('output','r')
....lista = []
....for line in data.readlines():
........line = line.strip()
........number = string.atof(line)
........lista.append(number)
....return lista
....data.close()
def sort(x):
....x.sort()
def out_interval():
....stej = 0
....for i in generator():
........if i < (-(1.96*deviacija())) or i > (1.96*deviacija()):
............stej+=1
....print 'Izven 95-odstotnega intervala zaupanja je %i stevil!' % (stej)
def _main_():
....generator(100)
....output_writer()
....sort(branje())
....out_interval()
....print '\nStandardni odklon: %i' % (deviacija())
....print '\nSrednja vrednost: %i' % (srednja_vrednost())
_main_()
________________________________________________________________________________
V terminal samo vpises: python naloga.py output
Podenje tiskarskih skratov...
________________________________________________________________________________
import random
import sys
import string
output = open(sys.argv[1],'w')
#iz mnozice {1,2,3} izberemo vrednost za deviacijo in srednjo vrednost
def deviacija(n=4):
....return random.randrange(1,n)
def srednja_vrednost(n=4):
....return random.randrange(1,n)
#generiramo mnozico 100 normalno porazdeljenih stevil in jih dodajamo v listo *numbers*
def generator(vel=100):
....numbers = []
....dev = deviacija(4)
....mean = srednja_vrednost(4)
....for i in range(vel):
........numbers.append(random.gauss(mean,dev))
....return numbers
def output_writer():
....for stevilo in generator(100):
........stevilka = '%f' % (stevilo)
........output.write(stevilka+'\n')
....output.close()
def branje():
....data = open('output','r')
....lista = []
....for line in data.readlines():
........line = line.strip()
........number = string.atof(line)
........lista.append(number)
....return lista
....data.close()
def sort(x):
....x.sort()
def out_interval():
....stej = 0
....for i in generator():
........if i < (-(1.96*deviacija())) or i > (1.96*deviacija()):
............stej+=1
....print 'Izven 95-odstotnega intervala zaupanja je %i stevil!' % (stej)
def _main_():
....generator(100)
....output_writer()
....sort(branje())
....out_interval()
....print '\nStandardni odklon: %i' % (deviacija())
....print '\nSrednja vrednost: %i' % (srednja_vrednost())
_main_()
________________________________________________________________________________
V terminal samo vpises: python naloga.py output
Podenje tiskarskih skratov...
Zgodovina sprememb…
- spremenil: pietro ()
pietro ::
Sele sedaj sem opazil, da nisem cisto sledil navodilom. Ce ne bos znal popraviti, sporoci, pa ti bom, ce ne kdo drug, pomagal.
slevin ::
Ej hvala za odgovor, vendar ne vem kje bi bila napaka, razen tega da mi python javi napako pri stavku: output = open(sys.argv[1],'w')
Vbistvu bi blo treba stevila zapisat v .txt datoteko, ane
Prosim te še za tole zadevo.
hvala in lp
Vbistvu bi blo treba stevila zapisat v .txt datoteko, ane
Prosim te še za tole zadevo.
hvala in lp
pietro ::
Ce ti vrze napako v smislu IndexError, potem si v terminalu pzabil dodati argument za ime izhodne datoteke - temu lahko dodas tudi poljubno koncnico.
Na primer: python naloga.py izpis.txt
Na primer: python naloga.py izpis.txt
slevin ::
Vrže mi tole:
IndexError: list index out of range
mi ne rata
torej kje točno?
v output_writer?
IndexError: list index out of range
mi ne rata
torej kje točno?
v output_writer?
pietro ::
Kodo pusti, kot je. V Shell-u ali Terminalu, kjer zaganjas program, samo vpisi (najprej gres v mapo, kjer se skripta za program nahaja):
python naloga.py output
(med naloga.py, ki je ime skripte, in besedo output je presledek)
Meni deluje brez problema.
python naloga.py output
(med naloga.py, ki je ime skripte, in besedo output je presledek)
Meni deluje brez problema.
slevin ::
Žal ne vem kaj misliš.
Jst vedno ko pišem program, pritisnem ctrl+n, nato pišem, pišem, potem pa F5 (run module) za zagon programa.
Jst vedno ko pišem program, pritisnem ctrl+n, nato pišem, pišem, potem pa F5 (run module) za zagon programa.
pietro ::
Razumem. Spremeni tole vrstico na zacetku (output = open(sys.argv[1],'w')) v tole (output = open('output','w'))
LP
LP
slevin ::
Sm naredil - javi napako. Pol sm pa odstranil prvi in zadnji oklepapaj, potem je blo pa OK. Vendar se v Shell ne izpiše noben print stavek od podanih v kodi.
Ustvari se datoteka output, kateri sm dodal končnico .txt - datoteka pa je prazna.
V tej datoteki pa bi morala bi ti števila.
Kako bi to popravil?
Ustvari se datoteka output, kateri sm dodal končnico .txt - datoteka pa je prazna.
V tej datoteki pa bi morala bi ti števila.
Kako bi to popravil?
pietro ::
Kje in kdaj si dodal .txt? Ce si dodal v kodi, pazi, da bo program potem tudi odpiral 'output.txt'. Ce je mapa prazna, pomeni, da jo je samo ustvaril z ukazom open, v njo pa se ni zacel pisati.
slevin ::
.txt sm napisal kar v ime datoteke, ki je bila prej samo output. Torej sm dodal pa output.txt, pač da sm jo lahko odprl - vendar je bila prazna.
Kot piše navodilo: 100 zgeneriranih števil bi radi zapisali v neko .txt datoteko, jih iz datoteke prebrali,
uredili po velikosti in vse skupaj zapisali v neko drugo datoteko .txt.
Tako je treba, a ne
Bi lahko še to popravil?
Kot piše navodilo: 100 zgeneriranih števil bi radi zapisali v neko .txt datoteko, jih iz datoteke prebrali,
uredili po velikosti in vse skupaj zapisali v neko drugo datoteko .txt.
Tako je treba, a ne
Bi lahko še to popravil?
Zgodovina sprememb…
- spremenil: slevin ()
pietro ::
import random
import string
output1 = open('neurejen.txt','w')
#iz mnozice {1,2,3} izberemo vrednost za deviacijo in srednjo vrednost
def deviacija(n=4):
return random.randrange(1,n)
def srednja_vrednost(n=4):
return random.randrange(1,n)
#generiramo mnozico 100 normalno porazdeljenih stevil in jih dodajamo v listo *numbers*
def generator(vel=100):
numbers = []
dev = deviacija(4)
mean = srednja_vrednost(4)
for i in range(vel):
numbers.append(random.gauss(mean,dev))
return numbers
def output_writer():
for stevilo in generator(100):
stevilka = '%f' % (stevilo)
output1.write(stevilka+'\n')
output1.close()
lista = []
def branje():
data = open('neurejen.txt','r')
for line in data.readlines():
line = line.strip()
number = string.atof(line)
lista.append(number)
return lista
data.close()
def sort(x):
x.sort()
def out_interval():
stej = 0
output2 = open('urejeni.txt','w')
for i in lista:
j = '%f' % (i)
output2.write(j+'\n')
if i < (-(1.96*deviacija())) or i > (1.96*deviacija()):
stej+=1
print 'Izven 95-odstotnega intervala zaupanja je %i stevil!' % (stej)
output2.close()
def _main_():
generator()
output_writer()
sort(branje())
out_interval()
print '\nStandardni odklon: %i' % (deviacija())
print '\nSrednja vrednost: %i' % (srednja_vrednost())
_main_()
Koda je sicer slampasta ko vrag, vendar dela:).
import string
output1 = open('neurejen.txt','w')
#iz mnozice {1,2,3} izberemo vrednost za deviacijo in srednjo vrednost
def deviacija(n=4):
return random.randrange(1,n)
def srednja_vrednost(n=4):
return random.randrange(1,n)
#generiramo mnozico 100 normalno porazdeljenih stevil in jih dodajamo v listo *numbers*
def generator(vel=100):
numbers = []
dev = deviacija(4)
mean = srednja_vrednost(4)
for i in range(vel):
numbers.append(random.gauss(mean,dev))
return numbers
def output_writer():
for stevilo in generator(100):
stevilka = '%f' % (stevilo)
output1.write(stevilka+'\n')
output1.close()
lista = []
def branje():
data = open('neurejen.txt','r')
for line in data.readlines():
line = line.strip()
number = string.atof(line)
lista.append(number)
return lista
data.close()
def sort(x):
x.sort()
def out_interval():
stej = 0
output2 = open('urejeni.txt','w')
for i in lista:
j = '%f' % (i)
output2.write(j+'\n')
if i < (-(1.96*deviacija())) or i > (1.96*deviacija()):
stej+=1
print 'Izven 95-odstotnega intervala zaupanja je %i stevil!' % (stej)
output2.close()
def _main_():
generator()
output_writer()
sort(branje())
out_interval()
print '\nStandardni odklon: %i' % (deviacija())
print '\nSrednja vrednost: %i' % (srednja_vrednost())
_main_()
Koda je sicer slampasta ko vrag, vendar dela:).
slevin ::
Sm tako probal, vendar spet javi napako.
Zato sm zadnji odstavek (_main_()) spremeniv v :
if __name__ == "__main__":
glavna_funkcija()
v glavnem, zdej zadeva deluje! Celo dva .txt dokumenta se ustvarita!
pietro HVALA! MUCHOS GRACIAS !!!!!!!!!!!
Zato sm zadnji odstavek (_main_()) spremeniv v :
if __name__ == "__main__":
glavna_funkcija()
v glavnem, zdej zadeva deluje! Celo dva .txt dokumenta se ustvarita!
pietro HVALA! MUCHOS GRACIAS !!!!!!!!!!!
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | python-rabim pomočOddelek: Programiranje | 2773 (1003) | rnla1973 |
» | Python - pomoč (strani: 1 2 3 )Oddelek: Programiranje | 18018 (8766) | black ice |
⊘ | python pomočOddelek: Programiranje | 3403 (2324) | Mavrik |
» | Python, prosim za pomoc pri programiranju (strani: 1 2 3 )Oddelek: Programiranje | 13970 (10072) | lenika |
» | Skripte (strani: 1 2 )Oddelek: Programiranje | 8742 (6605) | Microsoft |