Liste erstellen mit "und"

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
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

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.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1023
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

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))

sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

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.
Benutzeravatar
Dennis89
User
Beiträge: 1167
Registriert: Freitag 11. Dezember 2020, 15:13

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
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
snafu
User
Beiträge: 6745
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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()
Benutzeravatar
snafu
User
Beiträge: 6745
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1023
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

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.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten