ValueError: invalid literal for int() with base 10: '.'

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
milan.m
User
Beiträge: 1
Registriert: Montag 13. Mai 2019, 17:24

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?
xXSkyWalkerXx1
User
Beiträge: 379
Registriert: Mittwoch 27. Juni 2018, 17:39

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.
__deets__
User
Beiträge: 14541
Registriert: Mittwoch 14. Oktober 2015, 14:29

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?
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@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()
Benutzeravatar
__blackjack__
User
Beiträge: 13110
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten