Seite 1 von 1

Liste erstellen mit "und"

Verfasst: Montag 22. April 2024, 13:12
von Pitwheazle
Meine Schülerinnen und Schüler müssen Durchschnittswerte berechnen.
Also etwa so:

Code: Alles auswählen

noten = []
for note in range(10):
    note = random.randint(1,4)
    noten.append(str(note))                          
text = "Otto hat im Zeugnis folgende Noten:<br>{}<br>Berechne die Durchschnittsnote!".format(", ".join(noten))
Das funktioniert soweit prima. Ich hätte jetzt aber gerne das letzte Komma durch ein "und eine" ersetzt - wie ich python kenne, kann man das sicher auch elegant lösen ohne die Liste aufzudröseln - ich habe aber keine Möglichkeit gefunden, das letzte Komma durch " und eine" zu ersetzen.

Re: Liste erstellen mit "und"

Verfasst: Montag 22. April 2024, 14:51
von DeaD_EyE
So z.B.:

Code: Alles auswählen

import random


def noten(name, anzahl):
    noten = list(map(str, random.choices(range(1,7), k=anzahl)))
    fmt = f"{name} hat im Zeugnis folgende {'Note' if anzahl < 2 else 'Noten'}"
    end = "<br>Berechne die Durchschnittsnote!"
    if anzahl == 1:
        return f"{fmt}:<br>{noten[0]}{end}"
    elif anzahl == 2:
        return f"{fmt}:<br>{noten[0]} und {noten[1]}{end}"
    else:
        return f"{fmt}:<br>{', '.join(noten[:-1])} und {noten[1]}{end}"


print(noten("Alfred", 1))
print(noten("Alex", 2))
print(noten("Anton", 3))
print(noten("Daniel", 10))


Re: Liste erstellen mit "und"

Verfasst: Montag 22. April 2024, 15:55
von Pitwheazle
Danke dafür, das [:-1] war das was ich gesucht habe - aber blöderweise habe ich die eckige Klammer vergessen :(.
Damit man die Aufgaben im Kopf rechnen kann, nehme ich immer 10 Werte. (Einige SuS benutzen dafür trotzdem einen Taschenrechner).
Anmerkung: Aus Verzweiflung hatte ich es jetzt doch tatsächlich mit:

Code: Alles auswählen

" und eine ".join(noten).replace(" und eine ",", ",8)
probiert :D - geht auch.

Re: Liste erstellen mit "und"

Verfasst: Montag 22. April 2024, 16:31
von Dennis89
Hallo,

wobei nach dem "und" nicht auf Index 1 zugegriffen werden sollte, den dieser lief ja schon durch die Schleife. Die letzte Note fehlt noch, das wäre -1. Sicherlich nur ein Typo, wollts trotzdem erwähnen, falls sich jemand wundert.

Grüße
Dennis

Re: Liste erstellen mit "und"

Verfasst: Montag 22. April 2024, 18:59
von snafu
Man könnte auch Tuple Unpacking benutzen:

Code: Alles auswählen

import random

def gib_noten(anzahl=10):
    *noten, letzte_note = random.choices(range(1, 7), k=anzahl)
    if not noten:
        return f"Eine {letzte_note}"
    return f"{', '.join(map(str, noten))} und eine {letzte_note}"

def main():
    print(gib_noten())
    for anzahl in range(1, 4):
        print(gib_noten(anzahl))

if __name__ == "__main__":
    main()

Re: Liste erstellen mit "und"

Verfasst: Montag 22. April 2024, 19:08
von snafu
DeaD_EyE hat geschrieben: Montag 22. April 2024, 14:51 So z.B.:
Die zweite Bedingung ist unnötig, denn join() mit nur einem String gibt einfach den String zurück.

Re: Liste erstellen mit "und"

Verfasst: Dienstag 23. April 2024, 11:55
von DeaD_EyE
snafu hat geschrieben: Montag 22. April 2024, 19:08
DeaD_EyE hat geschrieben: Montag 22. April 2024, 14:51 So z.B.:
Die zweite Bedingung ist unnötig, denn join() mit nur einem String gibt einfach den String zurück.
👍 man lernt nie aus.