PDA

Visualizza la versione completa : [Python] Ripetere operazione


maiosyet_2
03-05-2005, 00:33
In python proprio non mi viene ciò che invece sarebbe così facile da fare in C:



cx = raw_input("\nSpecify input file: ")
f = open(cx)

number = f.readline()
y = int(number)
res = y / total

if res ==
<operazioni>


Io dovrei estendere quest'azione a ogni elemento di un file fatto cosi':

5
10
15
566
...

Quindi ripetere il secondo blocco di codice (leggi riga, convertila in un dato di tipo intero, processa il dato ottenuto) per ogni numero presente nel file...

Grassie :smack:

dekdek
03-05-2005, 10:13
Google dice:

http://www.imarend.com/tutorials/PythonBase/python7US.html

maiosyet_2
03-05-2005, 16:36
Si vabè avevo già provato a forzarlo con un while, ma non funziona, ottengo quest'errore:



cx = raw_input("\nSpecify input file: ")
f = open(cx)

a=0
while a<2:

number = f.readline()
y = int(number)
res = y / 2

if res == 10:
print "eh..."

elif res == 5:
print "uh..."



Specify input file: /tmp/s
uh...
Traceback (most recent call last):
File "html.py", line 10, in ?
y = int(number)
ValueError: invalid literal for int():


Non riesce a reiterare il processo, senza contare che il counter andrebbe impostato a while a =<numeroDelleRighe>

suomi_viking_86
03-05-2005, 22:26
questo dovrebbe funzionare, inserisci le istruzioni if nel ciclo while.
python leggendo una linea riporta anche il carattere che la termina (lo \n), devi quindi toglierlo (la funzione cutENDL che ho scritto fa già il cast ad INT, dovrebbe essere a posto).
per il ciclo while dovrebbe esserci qualcosa di più elegante, ma così funziona.


def cutENDL(string):
newstring=""
x=0
while(x<(len(string)-2)):#-1 per l'index,-1 per il \n
newstring=newstring+string[x]
return int(string)

#il tuo programma
cx = raw_input("\nSpecify input file: ")
f = open(cx)
number=f.readline()
while(number):
print cutENDL(number)
number=f.readline()

maiosyet_2
04-05-2005, 16:52
Ti ringrazio, ma non ho capito bene comple implementare il tuo codice: ho provato così:



def cutENDL(string):
newstring=""
x=0
while(x<(len(string)-2)):#-1 per l'index,-1 per il \n
newstring=newstring+string[x]
return int(string)

#il tuo programma
cx = raw_input("\nSpecify input file: ")
f = open(cx)
number=f.readline()
while(number):

# print cutENDL(number) # se non la commento il prog non va
number = f.readline()
y = int(number)
res = y / 2
if res == 10:
print "eh..."

elif res == 5:
print "uh..."


Ma il programma spara i risultati apparentemente a caso, e alla fine termina con un errore:

Il file di prova:


$ cat /tmp/s
20
10
20
20
10 # questo non viene conteggiato e genera l'errore

Il programma eseguito:


uh...
eh...
eh...
uh...
Traceback (most recent call last):
File "html.py", line 19, in ?
y = int(number)


Come puoi vedere non c'azzecca niente, il risultato doveva essere

eh...
uh...
eh...
eh...
uh...

:stordita:

suomi_viking_86
04-05-2005, 19:48
così funziona


def cutENDL(string):
newstring=""
x=0
while(x<(len(string)-2)):#-1 per l'index,-1 per il \n
newstring=newstring+string[x]
return int(string)

cx = raw_input("\nSpecify input file: ")
f = open(cx)
number=f.readline()
while(number):
y = cutENDL(number)
res = y / 2
if res == 10:
print "eh..."
elif res == 5:
print "uh..."
number = f.readline()

suomi_viking_86
04-05-2005, 20:45
c'è un loop infinito nella funzione, quì è risolto


def cutENDL(string):
newstring=""
x=0
while(x<(len(string)-2)):#-1 per l'index,-1 per il \n
newstring=newstring+string[x]
x=x+1
return int(string)

cx = raw_input("\nSpecify input file: ")
f = open(cx)
number=f.readline()
while(number):
y = cutENDL(number)
res = y / 2
if res == 10:
print "eh..."
elif res == 5:
print "uh..."
number = f.readline()

Loading