» »

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
  • 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...

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

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

slevin ::

Vrže mi tole:
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.

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.

pietro ::

Razumem. Spremeni tole vrstico na zacetku (output = open(sys.argv[1],'w')) v tole (output = open('output','w'))

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?

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?

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:).

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 !!!!!!!!!!!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

python-rabim pomoč

Oddelek: Programiranje
162643 (873) rnla1973
»

Python - pomoč (strani: 1 2 3 )

Oddelek: Programiranje
10317066 (7814) black ice

python pomoč

Oddelek: Programiranje
393282 (2203) Mavrik
»

Python, prosim za pomoc pri programiranju (strani: 1 2 3 )

Oddelek: Programiranje
10413201 (9303) lenika
»

Skripte (strani: 1 2 )

Oddelek: Programiranje
508269 (6132) Microsoft

Več podobnih tem