Forum
>>
Principianti
>>
Errore persistente
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da michele3696 |
2016-08-15 17:52:55 - Errore persistente
|
Salve, svolgendo un programma mi trovo di fronte ad un errore persistente che non riesco a capire,
so a grandi linee di che si tratta ma non riesco ad eliminarlo, confido in qualcuno che riesca a chiarirmi le idee: ValueError: invalid literal for int() with base 10: '' il programma lavora bene fino a quasi la fine, infatti da i valori aspettati in output, l'unico problema è che arrivato alla fine della lettura del file invece di uscire dal ciclo while con sentinella rimane all'interno generando l'errore: testo dell'esercizio: ''' A Ex4(file) Scrivere una funzione che prende in ingresso un file che contiene n interi per ogni riga separati da spazio e restituisce l’intero più piccolo e l’intero più grande. Ad esempio, se il file vale “3 7\n55 17\n8 23\n99 12\n6 21\n” la funzione deve restituire (3,99). ''' filein = open('filein_ex4.txt', 'r', encoding='utf-8') line = filein.readline() ch = line.strip().split(' ') miN = maX = int(ch0) while len(line) > 0: # while con sentinella, esce dal ciclo quando finiscono le righe del file ch = line.strip().split(' ') if int(ch0) < int(ch1): print(ch0, ch1) # controllo numeri if miN > int(ch0): miN = int(ch0) if maX < int(ch1): maX = int(ch1) else: print(ch0, ch1) # controllo numeri if miN > int(ch1): miN = int(ch1) if maX < int(ch0): maX = int(ch0) print('min = ', miN, 'max = ', maX) # controllo numeri line = filein.readline() filein.close() print('minimum is', miN, 'maximum is', maX) questo è l'output del programma dopo averlo eseguito: /usr/bin/python3.5 /home/michele/Python/Michele's-projects/Esercitazione6/ex4.py 3 7 min = 3 max = 7 55 17 min = 3 max = 55 8 23 min = 3 max = 55 99 12 min = 3 max = 99 6 21 min = 3 max = 99 Traceback (most recent call last): File "/home/michele/Python/Michele's-projects/Esercitazione6/ex4.py", line 15, in <module> if int(ch0) < int(ch1): ValueError: invalid literal for int() with base 10: '' Process finished with exit code 1 grazie in anticipo e buon Ferragosto! NB: accanto ai punti interrogativi nel testo c'è la [ ], non so perchè non la riconosce. --- Ultima modifica di michele3696 in data 2016-08-15 18:10:54 --- |
|
Scritto da Daniele aka Palmux |
2016-08-15 20:05:33 - Re: Errore persistente
|
Ciao caro, il messaggio è abbastanza esplicito, ma ti do un indizio:
>>> int('7777.000000') Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10 >>> float('7777.000000') 7777.0Buon ferragosto anche a te. --- Ultima modifica di Daniele aka Palmux in data 2016-08-15 20:06:02 --- |
|
Scritto da michele3696 |
2016-08-15 20:36:33 - Re: Errore persistente
|
Forse non ho ben capito l'indizio -.- io ho interpretato così:
''' A Ex4(file) Scrivere una funzione che prende in ingresso un file che contiene n interi per ogni riga separati da spazio e restituisce l’intero più piccolo e l’intero più grande. Ad esempio, se il file vale “3 7\n55 17\n8 23\n99 12\n6 21\n” la funzione deve restituire (3,99). ''' filein = open('filein_ex4.txt', 'r', encoding='utf-8') line = filein.readline() ch = line.strip().split(' ') miN = maX = float(ch[0]) 8)]while 8)]len(line) > 0: # while con sentinella, esce dal ciclo quando finiscono le righe del file ch = line.strip().split(' ') n1 = float(ch[0]) n2 = float(ch[1]) if n1 < n2: print(ch[0], ch[1]) # controllo numeri if miN > n1: miN = n1 if maX < n2: maX = n2 else: print(ch[0], ch[1]) # controllo numeri if miN > n2: miN = n2 if maX < n1: maX = n1 print('min = ', miN, 'max = ', maX) # controllo numeri line = filein.readline() filein.close() print('minimum is', miN, 'maximum is', maX) solo che mi da lo stesso un errore: /usr/bin/python3.5 /home/michele/Python/Michele's-projects/Esercitazione6/ex4.py 3 7 min = 3.0 max = 7.0 55 17 min = 3.0 max = 55.0 8 23 min = 3.0 max = 55.0 99 12 min = 3.0 max = 99.0 6 21 min = 3.0 max = 99.0 Traceback (most recent call last): File "/home/michele/Python/Michele's-projects/Esercitazione6/ex4.py", line 15, in <module> n1 = float(ch0) ValueError: could not convert string to float: modificando invece il numero accanto al while da 0 a 2 ossia: 8)]while 8)]len(line) > 2:il problema quindi risiedeva nel modo in cui controllavo la riga finale, volendo stoppare il ciclo while prima di immettere nel ciclo stesso un valore ' ' stringa vuota. Correggendo la variabile line ho potuto eliminare qualsiasi valore di spaziatura con line = filein.readline().strip filein = open('filein_ex4.txt', 'r', encoding='utf-8') line = filein.readline().strip() ch = line.split(' ') miN = maX = float(ch[0]) while len(line) > 0: # while con sentinella, esce dal ciclo quando finiscono le righe del file ch = line.split(' ') n1 = float(ch[0]) n2 = float(ch[1]) if n1 < n2: print(ch[0], ch[1]) # controllo numeri if miN > n1: miN = n1 if maX < n2: maX = n2 else: print(ch[0], ch[1]) # controllo numeri if miN > n2: miN = n2 if maX < n1: maX = n1 print('min = ', miN, 'max = ', maX) # controllo numeri line = filein.readline().strip() filein.close() print('minimum is', miN, 'maximum is', maX) Grazie dell'aiuto. Buona serata! |
|
Scritto da Daniele aka Palmux |
2016-08-16 11:12:11 - Re: Errore persistente
|
Due cose veloci:
1. Formatta il codice quando lo posti, puoi farlo col pulsante che trovi in alto prima della tavolozza dei colori. In Python la sintassi importante. 2. Il secondo errore in realtà non era lo stesso, Python è autoesplicativo in questi casi. ValueError: could not convert string to float è qualcosa di diverso dal precedente. Eliminando dal tuo ciclo quella stringa finale hai aggirato il problema, che potevi anche eliminare con un semplice controllo di genere, passami il termine. Cya |
|
Scritto da michele3696 |
2016-08-16 19:03:02 - Re: Errore persistente
|
Ah ecco, consentimi un' ultima domanda, l'errore che mi viene fuori quando eseguo il programma che "non aggira il problema" per così dire, senza la correzione nella riga di " line = filein.readline().strip() "deriva dal fatto che legge una stringa del genere [ ' ' ] e cerca di convertirla in float vero? Nel caso, come posso correggerlo?
|
|
Scritto da ㎝ |
2016-08-16 19:58:43 - Re: Errore persistente
|
per esempio potresti tagliare la testa al tor^W serpente con:
>>> numbers = [int(i) for i in open("filein_ex4.txt").read().split()] >>> print(min(numbers), max(numbers)) 3 99 THE 🍺-WARE LICENSE (Revision ㊷):
<㎝🐌🐍.🇮🇹> wrote this post. As long as you retain this notice you can do whatever you want with this stuff. If we meet some day, and you think this stuff is worth it, you can buy me a 🍺 in return. -- ㎝ |
|
Scritto da michele3696 |
2016-08-16 22:01:25 - Re: Errore persistente
|
Bella pensata! Grazie mille!!
Devo imparare anche io a tagliare la testa al serpente |
Pagina: 1
Esegui il login per scrivere una risposta.