Seite 1 von 1
ValueError: invalid literal for int() with base 10: '.'
Verfasst: Montag 13. Mai 2019, 17:30
von milan.m
Hallo,
Ich habe erst vor sehr kurzer Zeit mit Python angefangen.
Nun habe ich eine Fehlermeldung bei diesem Code:
import turtle as tu
lines = 1000
with open("1_m_pi.txt","r") as f:
pi = f.read()
for n in range(lines):
zahl = int(pi[n])
rotation = zahl * 36
tu.setheading(rotation)
tu.forward(50)
tu.done()
ValueError: invalid literal for int() with base 10: '.'
Kann mir jemand weiterhelfen?
Re: ValueError: invalid literal for int() with base 10: '.'
Verfasst: Montag 13. Mai 2019, 17:37
von xXSkyWalkerXx1
Bitte verwende Code-Tags!
Code: Alles auswählen
import turtle as tu
lines = 1000
with open("1_m_pi.txt","r") as f:
pi = f.read()
for n in range(lines):
zahl = pi[n]
rotation = zahl * 36
tu.setheading(rotation)
tu.forward(50)
tu.done()
Ich glaube allerdings, dass das deklarieren mit int() nicht nötig ist.
Re: ValueError: invalid literal for int() with base 10: '.'
Verfasst: Montag 13. Mai 2019, 17:40
von __deets__
Doch, das ist nötig. Es ist auch keine Deklaration. Sondern eine Wandlung von einem String zu einer zahl. Nur das die Zahlen die in der Textdatei stehen keine reinen integer sind. Entweder ist also die Datei anzupassen. Oder das parsen toleranter. Wie sieht der Inhalt der Datei aus?
Re: ValueError: invalid literal for int() with base 10: '.'
Verfasst: Montag 13. Mai 2019, 17:47
von Sirius3
@milan.m: `read` liest die Datei als ein String, und der Indexzugriff bei `zahl = int(pi[n])` liefert dann einzelne Zeichen. Daneben ist es auch unschön, mit einem Index auf eine Liste zuzugreifen, anstatt direkt über den Inhalt mit for zu iterieren, am besten direkt über das Dateiobjekt.
Dass Du einen Punkt in der Datei hast, läßt vermuten, dass Du auch in Wirklichkeit `float`s statt `int`s in der Datei stehen hast.
Code: Alles auswählen
import turtle as tu
with open("1_m_pi.txt") as lines:
for line in lines:
zahl = float(line)
rotation = zahl * 36
tu.setheading(rotation)
tu.forward(50)
tu.done()
Re: ValueError: invalid literal for int() with base 10: '.'
Verfasst: Montag 13. Mai 2019, 18:10
von __blackjack__
Ich denke das mit dem `read()` war schon richtig und es soll wirklich jedes Zeichen, also jede Ziffer betrachtet werden. So eine Datei habe ich nämlich auch, und da sind die erste Million Stellen von π drin. Und dabei wird dann über den Dezimalpunkt nach der 3 gestolpert. Da muss man halt überlegen was man mit dem machen will. Wahrscheinlich darauf testen und ihn überspringen.