Visualizza la versione completa : [Python] Ripetere operazione
maiosyet_2
02-05-2005, 23: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:
Google dice:
http://www.imarend.com/tutorials/PythonBase/python7US.html
maiosyet_2
03-05-2005, 15: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, 21: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, 15: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, 18: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, 19: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()