10 Fehler im Code (Aufgabe)

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
Lucas194lk
User
Beiträge: 1
Registriert: Montag 11. Juli 2022, 23:25

Hallo zusammen,
Ich hab eine Aufgabe zum Thema Fehlersuche, leider hab ich keine Lösungen dazu.
Könnte mir jemand dabei helfen insgesamt 10 Fehler zu finden (inkl. Verbesserung?)
Vielen Dank schonmal! ;)

Bild

Hier der Link zum Screenshot der Aufgabe
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Profi-Tipp: Programm abtippen & den Python-Interpreter die Fehlersuche machen lassen. Und korrigieren.
Sirius3
User
Beiträge: 18279
Registriert: Sonntag 21. Oktober 2012, 17:20

Wir machen hier keine Hausaufgabe.
Wenn Du irgendwo konkret Probleme hast, dann stelle dazu eine Frage.
Dann auch nicht Code als Bild hier reinstellen, sondern als Text in Code-Tags.
Beim ersten halben Duzend Fehlern hilft Dir der Compiler.

Neben den offensichtlichen Fehlern, gibt es etliche, die wohl nicht in der Aufgabe gemeint sind: beim öffnen einer Text-Datei sollte immer das Encoding mit angegeben werden, Dateien öffnet man innerhalb eines with-Statements. `lines` ist der falsche Name für die Anzahl Zeilen. `x` ist ein schlechter Name für eine Zeile. Wenn man angst hat, dass eine Datei zu groß sein könnte, dann sollte man auch nach 11 Zeilen abbrechen.
Selbst die Anzahl Zeilen zu zählen ist überflüssig, weil das ja schon die Liste selbst über ihre Länge tut.
Ein ordentliches Programm ist in Funktionen organisiert, hier also mindestens eine zum Anlegen der Datei und eine für das Lesen und Ausgeben.
Benutzeravatar
noisefloor
User
Beiträge: 4196
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
leider hab ich keine Lösungen dazu.
Heißt das, dass du keinen einzigen Fehler siehst? Einige sind schon sehr offensichtlich. Wenn du wirklich keine Fehler siehst -> Grundlagentutorial auf docs.python.org durcharbeiten.

Ansonsten hätte ich auch die gleiche Frage wir von Sirius3 auch gestellt: Fehler = Fehler, die die Ausführung des Programm verhindern? Oder heißt Fehler auch, dass man schlechten (aber lauffähigen) Code durch ordentliches Python ersetzt?

Gruß, noisefloor
Benutzeravatar
snafu
User
Beiträge: 6873
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Da sind Syntaxfehler drin, nicht definierte Namen und die falschen Literale zum Erstellen einer Liste.
karolus
User
Beiträge: 144
Registriert: Samstag 22. August 2009, 22:34

Einfach herrlich… selbst der Link enthält einen Fehler: ……/bild/2cfa79008-phyton-fehlersuche
Benutzeravatar
__blackjack__
User
Beiträge: 14078
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Bilder mit Text sind nicht schön. Hier Aufgabe und Quelltext mal als *Text*:
Aufgabe 4

Es ist ein Python Programm gegeben, das eine Textdatei mit Inhalt füllt. Die Anzahl der Zeilen und der Text pro Zeile wird vom Benutzer eingegeben. Danach wird die Datei ausgelesen und die einzelnen Zeilen in eine Liste mit dem Namen „list“ geschrieben. Zum Schluss wird die Liste ausgegeben, falls die Datei höchstens 10 Zeilen hat.

Finden Sie die 10 Fehler im Quellcode. Markieren Sie die Stellen im Programm und schreiben Sie den korrigierten Quellcode.

Code: Alles auswählen

from sys import argv
script, filename == argv

file = open(filename)
lines = int(input("Wie viele Zeilen sollen in die Datei geschrieben werden?")
for i in range(0, lines):
    text = input(f"Bitte nächste Zeile für {filename} eingeben: ")
    file.write(text+"\n")

file.close()
file = open(file)

list = ()
i=0
for x in file:
  list.append(x)
  i +=1

if 0 <i<= 10:
    print("Die Datei hat {i} Zeilen.")
    print("Hier ist der Inhalt: ", l)
el if i > 10:
    print("Die Datei ist zu groß, um hier ausgegeben zu werden.")
else i == 0:
     print("Die Datei ist leider leer.")
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Benutzeravatar
__blackjack__
User
Beiträge: 14078
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Lucas194lk: Was auch noch in die Kategorie „Fehler oder nicht?“ fallen würde ist die inkonsistente Einrückungung, die zwar hier weder syntaktisch noch semantisch ein Problem ist, aber da dass eigentlich der Editor sauber erledigen sollte, und eine konsistente Einrückung für die Zusammenarbeit wichtig ist, würde ich alles ausser vier Leerzeichen pro Ebene tatsächlich als Fehler sehen.

Die inkonsistente Verwendendung von Leerzeichen um binäre Operatoren und Zuweisungen ist auch etwas das ich markieren/korrigieren würde.

Statt den Benutzer einfach so in einen `ValueError` laufen zu lassen wenn nicht exakt zwei Elemente in `sys.argv` stecken, würde man besser einen Hinweis darauf ausgeben, dass da ein Dateiname beim Aufruf übergeben werden soll.

Ebenso bei der Eingabe der Zeilenanzahl: Da wird weder behandelt, wenn der Benutzer gar keine Zahl eingibt, noch dass er ja auch negative Zahlen eingeben könnte.

Ungetestet:

Code: Alles auswählen

#!/usr/bin/env python3
from itertools import islice
from sys import argv

ENCODING = "utf-8"
MAX_OUPUT_LINES = 10


def ask_positive_integer(prompt):
    while True:
        try:
            result = int(input(prompt))
        except ValueError:
            print("Bitte eine Zahl eingeben!")
        else:
            if result >= 0:
                return result

            print("Die Zahl muss positiv sein!")


def create_file(filename):
    with open(filename, "w", encoding=ENCODING) as file:
        line_count = ask_positive_integer(
            "Wie viele Zeilen sollen in die Datei geschrieben werden? "
        )
        file.writelines(
            input(f"Bitte nächste Zeile für {filename} eingeben: ") + "\n"
            for _ in range(line_count)
        )


def process_file(filename):
    with open(filename, "r", encoding=ENCODING) as file:
        lines = list(islice(file, MAX_OUPUT_LINES + 1))

    if not lines:
        print("Die Datei ist leider leer.")
    elif len(lines) <= MAX_OUPUT_LINES:
        print(f"Die Datei hat {len(lines)} Zeilen.")
        print("Hier ist der Inhalt:", lines)
    else:
        print("Die Datei ist zu gross, um hier ausgegeben zu werden.")


def main():
    if len(argv) != 2:
        print(f"Verwendung: {argv[0]} <dateiname>")
        return

    create_file(argv[1])
    process_file(argv[1])


if __name__ == "__main__":
    main()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten