Noten basierend auf Punkten mit Python if-elif-else bestimmen

PythonBeginner
Jetzt üben

Einführung

Dieses Tutorial führt Sie durch die Implementierung eines Bewertungssystems unter Verwendung der if-elif-else-Anweisungen in Python. Sie lernen, wie Sie die Note eines Schülers basierend auf seinen Noten ermitteln, eine gängige Aufgabe in Bildungseinrichtungen. Am Ende dieses Tutorials haben Sie ein funktionierendes Bewertungsprogramm erstellt, das in realen Szenarien angewendet werden kann. Dieser praktische Ansatz stärkt Ihr Verständnis von bedingten Anweisungen in Python, die grundlegende Bausteine für komplexere Programmlogik sind.

Verständnis von Python-Bedingungsanweisungen

Bevor wir unser Bewertungssystem erstellen, wollen wir die grundlegenden Bedingungsanweisungen in Python verstehen. Bedingungsanweisungen ermöglichen es Ihrem Programm, Entscheidungen basierend auf bestimmten Bedingungen zu treffen.

Erstellen Ihrer ersten Python-Datei

Beginnen wir mit der Erstellung einer neuen Python-Datei:

  1. Klicken Sie in der WebIDE auf das Menü "Datei" oben links.
  2. Wählen Sie "Neue Datei" aus.
  3. Speichern Sie die Datei als conditional_demo.py im Verzeichnis /home/labex/project.

Einfache If-Else-Anweisung

Schreiben Sie in Ihrer Datei conditional_demo.py den folgenden Code:

## Basic if-else example
score = 75

if score >= 70:
    print("You passed the test!")
else:
    print("You need to study more.")

## Try changing the score to see different results

Dieses einfache Programm prüft, ob die Variable score 70 oder höher ist. Wenn dies der Fall ist, gibt es "You passed the test!" aus. Andernfalls gibt es "You need to study more." aus.

Testen Ihres Codes

Um Ihren Code auszuführen, öffnen Sie ein Terminal in der WebIDE und führen Sie aus:

python3 /home/labex/project/conditional_demo.py

Sie sollten die Ausgabe sehen:

You passed the test!

Hinzufügen weiterer Bedingungen mit If-Elif-Else

Erweitern wir unser Beispiel, um mehr Bedingungen mit der If-Elif-Else-Struktur zu behandeln:

## If-elif-else example
score = 85

if score >= 90:
    print("Excellent!")
elif score >= 80:
    print("Very good!")
elif score >= 70:
    print("Good!")
elif score >= 60:
    print("Satisfactory")
else:
    print("Needs improvement")

## Try different values for score to see different results

Speichern Sie die Datei und führen Sie sie erneut aus:

python3 /home/labex/project/conditional_demo.py

Ausgabe:

You passed the test!
Very good!

Die If-Elif-Else-Struktur wertet Bedingungen von oben nach unten aus. Sobald eine Bedingung wahr ist, wird der zugehörige Codeblock ausgeführt, und die restlichen Bedingungen werden übersprungen.

Das Verständnis dieses Ablaufs ist entscheidend für den Aufbau unseres Bewertungssystems im nächsten Schritt.

Erstellen eines einfachen Bewertungssystems

Nachdem wir nun die Bedingungsanweisungen verstanden haben, wollen wir ein einfaches Bewertungssystem erstellen. Wir erstellen eine Funktion, die numerische Noten in Buchstabennoten umwandelt.

Erstellen der Bewertungsdateidatei

  1. Erstellen Sie in der WebIDE eine neue Datei namens grading_system.py.
  2. Speichern Sie sie im Verzeichnis /home/labex/project.

Implementierung der grundlegenden Bewertungsfunktion

Schreiben Sie in Ihre Datei grading_system.py den folgenden Code:

def get_grade(marks):
    """
    Convert numerical marks to letter grades.

    A: 90-100
    B: 80-89
    C: 70-79
    D: 60-69
    F: 0-59
    """
    if marks >= 90:
        return 'A'
    elif marks >= 80:
        return 'B'
    elif marks >= 70:
        return 'C'
    elif marks >= 60:
        return 'D'
    else:
        return 'F'

## Test the function with a few examples
test_marks = [95, 82, 75, 65, 45]

for mark in test_marks:
    grade = get_grade(mark)
    print(f"Marks: {mark} - Grade: {grade}")

Dieser Code erstellt eine Funktion get_grade(), die die Noten eines Schülers als Eingabe nimmt und die entsprechende Buchstabenote basierend auf gängigen Bewertungsgrenzen zurückgibt.

Ausführen unseres Bewertungssystems

Testen wir unser Bewertungssystem, indem wir den Code ausführen:

python3 /home/labex/project/grading_system.py

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

Marks: 95 - Grade: A
Marks: 82 - Grade: B
Marks: 75 - Grade: C
Marks: 65 - Grade: D
Marks: 45 - Grade: F

Verständnis des Codes

Lassen Sie uns aufschlüsseln, wie dies funktioniert:

  1. Wir haben eine Funktion namens get_grade() definiert, die einen Parameter hat: marks
  2. Innerhalb der Funktion haben wir If-Elif-Else-Anweisungen verwendet, um die Noten mit verschiedenen Notengrenzen zu vergleichen.
  3. Wir haben eine Liste von Testnoten erstellt, um zu demonstrieren, wie die Funktion mit verschiedenen Werten arbeitet.
  4. Wir haben eine For-Schleife verwendet, um jede Note zu durchlaufen, ihre Note abzurufen und das Ergebnis auszugeben.

Dieses grundlegende Bewertungssystem funktioniert gut für Standardfälle, aber was ist mit Randfällen? Im nächsten Schritt werden wir unser System verbessern, um diese zu behandeln.

Umgang mit Randfällen in unserem Bewertungssystem

Unser grundlegendes Bewertungssystem funktioniert, berücksichtigt aber keine Randfälle wie:

  1. Ungültige Eingaben (Noten kleiner als 0 oder größer als 100)
  2. Nicht-numerische Eingaben

Verbessern wir unser Bewertungssystem, um diese Szenarien zu behandeln.

Aktualisieren des Bewertungssystems

Erstellen Sie eine neue Datei namens improved_grading.py im Verzeichnis /home/labex/project mit dem folgenden Code:

def get_grade(marks):
    """
    Convert numerical marks to letter grades with input validation.

    A: 90-100
    B: 80-89
    C: 70-79
    D: 60-69
    F: 0-59

    Returns "Invalid marks" for inputs outside the range of 0-100
    """
    try:
        ## Convert to float in case input is a string number
        marks = float(marks)

        ## Check if marks are in valid range
        if marks < 0 or marks > 100:
            return "Invalid marks: must be between 0 and 100"
        elif marks >= 90:
            return 'A'
        elif marks >= 80:
            return 'B'
        elif marks >= 70:
            return 'C'
        elif marks >= 60:
            return 'D'
        else:
            return 'F'
    except ValueError:
        return "Invalid marks: not a number"

## Test the function with valid and invalid inputs
test_inputs = [95, 82, 75, 65, 45, -5, 105, "abc", "75"]

for value in test_inputs:
    grade = get_grade(value)
    print(f"Input: {value} - Result: {grade}")

Ausführen des verbesserten Bewertungssystems

Führen Sie das verbesserte Bewertungssystem aus:

python3 /home/labex/project/improved_grading.py

Die Ausgabe sollte in etwa so aussehen:

Input: 95 - Result: A
Input: 82 - Result: B
Input: 75 - Result: C
Input: 65 - Result: D
Input: 45 - Result: F
Input: -5 - Result: Invalid marks: must be between 0 and 100
Input: 105 - Result: Invalid marks: must be between 0 and 100
Input: abc - Result: Invalid marks: not a number
Input: 75 - Result: C

Erklärungen zu den Verbesserungen

Betrachten wir die Verbesserungen, die wir vorgenommen haben:

  1. Eingabetypkonvertierung (Input Type Conversion): Wir verwenden float(), um die Eingabe in eine Zahl umzuwandeln, wodurch unsere Funktion String-Eingaben wie "75" akzeptieren kann.

  2. Gültigkeitsbereichsprüfung (Valid Range Check): Wir haben eine Bedingung hinzugefügt, um zu überprüfen, ob die Noten innerhalb des gültigen Bereichs von 0-100 liegen.

  3. Fehlerbehandlung (Error Handling): Wir haben unseren Code in einen Try-Except-Block eingeschlossen, um ValueError-Ausnahmen abzufangen, die auftreten, wenn nicht-numerische Eingaben bereitgestellt werden.

  4. Detaillierte Fehlermeldungen (Detailed Error Messages): Wir geben spezifische Fehlermeldungen zurück, um den Benutzer darüber zu informieren, was schief gelaufen ist, anstatt nur einen Fehlercode zurückzugeben.

Diese Verbesserungen machen unser Bewertungssystem robuster, indem sie verschiedene Randfälle auf elegante Weise behandeln. Das Programm liefert jetzt hilfreiches Feedback, wenn ungültige Eingaben gefunden werden, anstatt abzustürzen oder falsche Ergebnisse zu erzeugen.

Erweiterung des Bewertungssystems mit Feedback-Nachrichten

Verbessern wir unser Bewertungssystem weiter, indem wir für jede Note personalisierte Feedback-Nachrichten hinzufügen. Dies macht das System informativer und benutzerfreundlicher.

Erstellen des erweiterten Bewertungssystems

Erstellen Sie eine neue Datei namens enhanced_grading.py im Verzeichnis /home/labex/project:

def get_grade_with_feedback(marks):
    """
    Convert numerical marks to letter grades with personalized feedback.

    Returns a tuple containing the grade and a feedback message.
    """
    try:
        marks = float(marks)

        if marks < 0 or marks > 100:
            return (None, "Invalid marks: must be between 0 and 100")
        elif marks >= 90:
            return ('A', "Excellent! Outstanding performance.")
        elif marks >= 80:
            return ('B', "Very good! Above average performance.")
        elif marks >= 70:
            return ('C', "Good work! Average performance.")
        elif marks >= 60:
            return ('D', "Satisfactory. Below average but passing.")
        else:
            return ('F', "Needs improvement. Please study more.")
    except ValueError:
        return (None, "Invalid marks: not a number")

def format_report(student_name, marks, subject):
    """
    Generate a formatted report for a student.
    """
    grade, feedback = get_grade_with_feedback(marks)

    if grade is None:
        return f"Report for {student_name}: {feedback}"

    return f"""
Report Card
-----------
Student: {student_name}
Subject: {subject}
Marks: {marks}
Grade: {grade}
Feedback: {feedback}
"""

## Test the enhanced system with a few examples
students = [
    {"name": "Alice", "marks": 92, "subject": "Mathematics"},
    {"name": "Bob", "marks": 78, "subject": "Science"},
    {"name": "Charlie", "marks": 45, "subject": "History"},
    {"name": "David", "marks": "abc", "subject": "English"}
]

for student in students:
    report = format_report(student["name"], student["marks"], student["subject"])
    print(report)

Ausführen des erweiterten Bewertungssystems

Führen Sie das erweiterte Bewertungssystem aus:

python3 /home/labex/project/enhanced_grading.py

Sie sollten eine Ausgabe ähnlich der folgenden sehen:

Report Card
-----------
Student: Alice
Subject: Mathematics
Marks: 92
Grade: A
Feedback: Excellent! Outstanding performance.


Report Card
-----------
Student: Bob
Subject: Science
Marks: 78
Grade: C
Feedback: Good work! Average performance.


Report Card
-----------
Student: Charlie
Subject: History
Marks: 45
Grade: F
Feedback: Needs improvement. Please study more.

Report for David: Invalid marks: not a number

Erläuterung der neuen Funktionen

Betrachten wir die Verbesserungen, die wir implementiert haben:

  1. Personalisiertes Feedback (Personalized Feedback): Jede Note enthält jetzt eine spezifische Feedback-Nachricht, die Kontext und Ermutigung bietet.

  2. Rückgabeformat (Return Format): Unsere Funktion get_grade_with_feedback() gibt ein Tupel zurück, das sowohl die Note als auch die Feedback-Nachricht enthält.

  3. Berichtsformatierung (Report Formatting): Wir haben eine neue Funktion format_report() erstellt, die eine gut strukturierte Zeugniskarte für jeden Schüler generiert.

  4. Testen mit realen Daten (Testing with Real-world Data): Wir haben eine Liste von Dictionaries verwendet, um reale Schülerdaten zu simulieren, was eine gängige Datenstruktur in der Programmierung ist.

  5. Fehlerbehandlung (Graceful Error Handling): Das System behandelt ungültige Eingaben immer noch auf elegante Weise, präsentiert die Fehler aber jetzt in einem benutzerfreundlichen Format.

Diese Erweiterungen machen unser Bewertungssystem praktischer für den realen Einsatz. Das personalisierte Feedback hilft den Schülern, ihre Leistung zu verstehen, während der formatierte Bericht eine professionelle Präsentation der Ergebnisse liefert.

Anwendung des Bewertungssystems auf einen realen Datensatz

Wenden wir nun unser Bewertungssystem auf ein realistischeres Szenario an. Wir erstellen ein Programm, das Schülerdaten aus einer Datei liest, Noten berechnet und einen umfassenden Bericht schreibt.

Erstellen eines Beispieldatensatzes

Erstellen wir zunächst eine Datei mit Beispieldaten von Schülern. Erstellen Sie eine neue Datei namens student_data.csv im Verzeichnis /home/labex/project mit folgendem Inhalt:

name,subject,marks
John,Mathematics,88
Emily,Mathematics,92
Michael,Mathematics,75
Sophia,Mathematics,68
Daniel,Mathematics,42
Olivia,Mathematics,95
William,Mathematics,73
Emma,Mathematics,60
James,Mathematics,79
Ava,Mathematics,85

Erstellen der vollständigen Bewertungsanwendung

Erstellen Sie nun eine neue Datei namens grading_application.py im Verzeichnis /home/labex/project:

def get_grade_with_feedback(marks):
    """
    Convert numerical marks to letter grades with personalized feedback.

    Returns a tuple containing the grade and a feedback message.
    """
    try:
        marks = float(marks)

        if marks < 0 or marks > 100:
            return (None, "Invalid marks: must be between 0 and 100")
        elif marks >= 90:
            return ('A', "Excellent! Outstanding performance.")
        elif marks >= 80:
            return ('B', "Very good! Above average performance.")
        elif marks >= 70:
            return ('C', "Good work! Average performance.")
        elif marks >= 60:
            return ('D', "Satisfactory. Below average but passing.")
        else:
            return ('F', "Needs improvement. Please study more.")
    except ValueError:
        return (None, "Invalid marks: not a number")

def process_student_data(input_filename, output_filename):
    """
    Process student data from a CSV file and generate a report.
    """
    try:
        ## Read the input file
        with open(input_filename, 'r') as file:
            lines = file.readlines()

        ## Skip the header line
        headers = lines[0].strip().split(',')
        data = [line.strip().split(',') for line in lines[1:]]

        ## Prepare the output
        output_lines = ["Student Grade Report\n", "=" * 20 + "\n\n"]

        ## Calculate statistics
        valid_marks = []
        grade_counts = {'A': 0, 'B': 0, 'C': 0, 'D': 0, 'F': 0, 'Invalid': 0}

        ## Process each student
        for student in data:
            name, subject, marks = student
            grade, feedback = get_grade_with_feedback(marks)

            if grade:
                valid_marks.append(float(marks))
                grade_counts[grade] += 1

                output_lines.append(f"Student: {name}\n")
                output_lines.append(f"Subject: {subject}\n")
                output_lines.append(f"Marks: {marks}\n")
                output_lines.append(f"Grade: {grade}\n")
                output_lines.append(f"Feedback: {feedback}\n\n")
            else:
                grade_counts['Invalid'] += 1
                output_lines.append(f"Student: {name}\n")
                output_lines.append(f"Subject: {subject}\n")
                output_lines.append(f"Error: {feedback}\n\n")

        ## Calculate statistics
        if valid_marks:
            average_mark = sum(valid_marks) / len(valid_marks)
            max_mark = max(valid_marks)
            min_mark = min(valid_marks)

            output_lines.append("Class Statistics\n")
            output_lines.append("-" * 15 + "\n")
            output_lines.append(f"Average Mark: {average_mark:.2f}\n")
            output_lines.append(f"Highest Mark: {max_mark:.1f}\n")
            output_lines.append(f"Lowest Mark: {min_mark:.1f}\n\n")

            output_lines.append("Grade Distribution\n")
            output_lines.append("-" * 17 + "\n")
            for grade, count in grade_counts.items():
                output_lines.append(f"{grade}: {count}\n")

        ## Write the output file
        with open(output_filename, 'w') as file:
            file.writelines(output_lines)

        print(f"Report successfully generated and saved to {output_filename}")

    except Exception as e:
        print(f"An error occurred: {str(e)}")

## Run the application
input_file = "/home/labex/project/student_data.csv"
output_file = "/home/labex/project/grade_report.txt"

process_student_data(input_file, output_file)

## Display the report in the console as well
print("\nGenerated Report Contents:")
print("--------------------------")
with open(output_file, 'r') as file:
    print(file.read())

Ausführen der vollständigen Anwendung

Führen Sie die Anwendung aus:

python3 /home/labex/project/grading_application.py

Das Programm liest die Schülerdaten, berechnet die Noten, generiert einen Bericht und zeigt ihn in der Konsole an. Sie sollten eine Ausgabe ähnlich der folgenden sehen:

Report successfully generated and saved to /home/labex/project/grade_report.txt

Generated Report Contents:
--------------------------
Student Grade Report
====================

Student: John
Subject: Mathematics
Marks: 88
Grade: B
Feedback: Very good! Above average performance.

Student: Emily
Subject: Mathematics
Marks: 92
Grade: A
Feedback: Excellent! Outstanding performance.

...

Class Statistics
---------------
Average Mark: 75.70
Highest Mark: 95.0
Lowest Mark: 42.0

Grade Distribution
-----------------
A: 2
B: 2
C: 3
D: 1
F: 2
Invalid: 0

Untersuchen der Berichtdatei

Sie können auch die generierte Berichtdatei überprüfen:

cat /home/labex/project/grade_report.txt

Die Datei sollte den gleichen Inhalt enthalten, der in der Konsole angezeigt wurde.

Verstehen der vollständigen Anwendung

Die von uns erstellte vollständige Bewertungsanwendung demonstriert mehrere wichtige Programmierkonzepte:

  1. Datei-E/A (File I/O): Lesen von Daten aus und Schreiben von Daten in Dateien
  2. Datenverarbeitung (Data Processing): Konvertieren und Analysieren von Rohdaten
  3. Statistikberechnung (Statistics Calculation): Berechnen von Durchschnittswerten und Ermitteln von Minimal-/Maximalwerten
  4. Fehlerbehandlung (Error Handling): Verwalten potenzieller Fehler während Dateioperationen
  5. Ausgabeformatierung (Formatting Output): Erstellen eines gut strukturierten, lesbaren Berichts

Diese Anwendung stellt einen realen Anwendungsfall für unser Bewertungssystem dar und zeigt, wie die If-Elif-Else-Anweisungen von Python angewendet werden können, um praktische Probleme in Bildungseinrichtungen zu lösen.

Zusammenfassung

In diesem Tutorial haben Sie erfolgreich ein umfassendes Bewertungssystem unter Verwendung der If-Elif-Else-Anweisungen von Python erstellt. Ausgehend von einfachen bedingten Anweisungen haben Sie Ihr Programm schrittweise erweitert, um Sonderfälle zu behandeln, personalisiertes Feedback zu geben und reale Schülerdaten zu verarbeiten.

Hier sind die wichtigsten Fähigkeiten, die Sie entwickelt haben:

  1. Verwenden von If-Elif-Else-Anweisungen zur Implementierung von Entscheidungslogik
  2. Validieren von Benutzereingaben und elegante Fehlerbehandlung
  3. Bereitstellen von aussagekräftigem Feedback basierend auf Bedingungen
  4. Verarbeiten von Daten aus Dateien und Generieren von Berichten
  5. Berechnen von Statistiken aus einem Datensatz

Diese Fähigkeiten sind grundlegend für viele Programmieraufgaben und können auf verschiedene reale Szenarien über Bewertungssysteme hinaus angewendet werden. Die Prinzipien der bedingten Logik, die Sie gelernt haben, dienen als Bausteine für komplexere Programme in Ihren zukünftigen Python-Projekten.

Denken Sie daran, dass gute Programmierpraktiken Folgendes umfassen:

  • Klare, beschreibende Variablen- und Funktionsnamen
  • Richtige Fehlerbehandlung
  • Gut strukturierter und organisierter Code
  • Hilfreiche Kommentare und Dokumentation

Üben Sie weiter, indem Sie dieses Bewertungssystem erweitern oder das Gelernte auf neue Programmierherausforderungen anwenden!