Programm was soll ich heute lernen

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.
ostigirl
User
Beiträge: 9
Registriert: Montag 18. November 2019, 11:35

Einen schönen guten Tag!
Ich habe gestern mit der Programmiersprache Python begonnen und hätte da eine Frage zu import random

Ich habe so begonnen:

import random
liste Thema = (".....")
liste1 Lernart = ("....")

Am Schluss eine Printausgabe was ich heute lernen soll mit Thema und Lernart

Frage= Wie definiere ich, dass das Lernthema Potenzrechnung, Bruchrechnen u.s.w kein Lernspiel hat oder keine Maturabeispiele.

Vielen Dank!
Andrea
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bitte zeig uns den richtigen Code, mit den Code-Tags. Im vollstaendigen Editor hier der Knopf </>. Denn sonst gehen die in Python wichtigen Einrueckungen verloren. Und das was da oben steht ist ja kein gueltiges Python.

Und leider verstehe ich nicht, was genau du da versuchst. Kannst du das nochmal umfangreicher beschreiben?
ostigirl
User
Beiträge: 9
Registriert: Montag 18. November 2019, 11:35

Code: Alles auswählen


from random import shuffle 

Maturathemen = "wurzelfunktion lineare-funktion quadratische-funktion wachstum-zerfall prozentrechnen \
                wachstum-zerfall zahlenbereiche venn-diagramme ".upper().split()
shuffle (Maturathemen)

Lernweise = "lernkarteien-erstellen lernen overviewseiten-erstellen maturaaufgaben lernspiele".upper().split()
shuffle (Lernweise)


#Für die Lernspiele nur die Themen = "lineare-funktion quadratische-funktion Prozentrechnen auswählen"

#Für die Maturaaufgaben nur die Themen ="lineare-funktion quadratische-funktion wachstum-zerfall zahlenbereiche venn-diagramme auswählen".upper().split()



print ("Was soll ich heute lernen?")
print ("Maturathemen: " + (Maturathemen[0] ))
print ("Lernart: " + (Lernweise[1] ))   
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Hinter Funktionen (shuffle, print) und der öffnen Klammer kommt kein Lerzeichen.
Variablen sollten klein geschrieben werden.

Was du brauchst ist eine Verknüpfung zwischen dem dem Maturathemen und den Lernweisen. Du musst also irgendwie festlegen für welche Maturathemen welche Lernweisen verfügbar sind.
Eine Möglichkeit wäre, eine geeignete Datenstruktur zu verwenden, statt zwei unabhängiger Listen. Zum Beispiel eine verschachtelte Liste oder ein dictionary, wobei der Schlüssel das Maturathema und der Wert eine Liste von Lernweisen ist. Du würdest dann zuerst das Maturathema "würfeln", die anschließend die dafür verfügbaren Lernweisen nehmen und daraus dann wieder eine zufällige Auswahl treffen.

Im Sinne der Normalisierung wäre natürlich noch ein Zwischenschritt zur Entkoppelung möglich, aber ich denke, das wäre in diesem Fall übertrieben, wäre aber die Kür statt die Pflicht.

Noch besser als die Liste durchzuschütteln und dann ein Element (übrigens einmal das 1. aus einer Liste und dann das 2. aus der anderen?) draus zu nehmen, finde ich persönlich ja random.choice(). Damit kann man sich aus einer Liste ein zufälliges Element zurückgeben lassen.

Wenn du die Werte eh alle in den Quellcode schreibst, solltest du sie nicht in eine Zeichenkette schreiben und dann in Großbuchstaben umwandeln und bei den Leerzeichen trennen. Das wird dir spätestens auf die Füße fallen, wenn mal etwas mit einem Leerzeichen im Namen vor kommt. Was du ja im Moment durch unnötige Bindestriche zu verhindern suchst. Nimm lieber die Notation für Listen, die braucht auch nicht mehr Brot:

Code: Alles auswählen

maturathemen = ["wurzelfunktion", "lineare funktion", "quadratische funktion",  "wachstum zerfall", "prozentrechnen", "zahlenbereiche", "venn-diagramme"]
Bzw. nimm _nicht_ die Notation für Listen, weil das wahrscheinlich die falsche Datenstruktur ist.
Übrigens würde dir ein dictionary auch gleich abnehmen, dass zumindest die Themen doppelt vorkommen - was sie in deinem Beispielcode tun.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Würde dir auch ein Dictionary empfehlen, das könnte dann so aussehen:

Code: Alles auswählen

maturathemen_mit_lernweise = {"Wurzelfunktion":["Lernkarteien erstellen", "lernen", "Overviewseiten erstellen", "Maturaaufgaben", "Lernspiele"],
                              "lineare Funktion":["Lernkarteien erstellen", "lernen","Maturaaufgaben"],
                              "quadratische Funktion":["lernen", "Overviewseiten erstellen", "Lernspiele"],
                              "Wachstum Zerfall":["Overviewseiten erstellen", "Maturaaufgaben", "Lernspiele"],
                              "Prozentrechnen":["lernen", "Lernspiele", "Overviewseiten erstellen"],
                              "Zahlenbereiche":["Lernkarteien erstellen", "Overviewseiten erstellen", "Lernspiele"],
                              "Venn-Diagramme":["Overviewseiten erstellen", "Maturaaufgaben", "Lernspiele"]}

Dann musst du eigentlich nur noch ein zufälliges Element aus den Schlüsseln des Dictionary ausgeben. Eine Liste der Schlüssel erhälst du mit

Code: Alles auswählen

list(maturathemen_mit_lernweise.keys())
Daraus musst du dann mit random.choice() ein Thema auswählen und in einer Variable speichern, danach kannst du mit dem Schlüssel auf die Werte dahinter zugreifen.

So greift man auf die Werte in einem Dictionary zu, wenn man den Schlüssel kennt:

Code: Alles auswählen

maturathemen_mit_lernweise[thema]
Das liefert eine Liste mit allen Lernweisen zu dem Thema, da musst du dann mit random.choice() auch noch einmal ein Thema ausgeben lassen.

Dann musst du eigentlich nur noch das Thema und die Lernweise printen.
ostigirl
User
Beiträge: 9
Registriert: Montag 18. November 2019, 11:35

Code: Alles auswählen

import random 

maturathemen_mit_lernweise = {"Wurzelfunktion":["Lernkarteien erstellen", "lernen", "Overviewseiten erstellen", "Maturaaufgaben"],
                              "lineare Funktion":["Lernkarteien erstellen", "Overviewseiten erstellen", "lernen","Maturaaufgaben"],
                              "quadratische Funktion":["lernen", "Maturaaufgaben", "Overviewseiten erstellen", "Lernspiele", "Lernkarteien erstellen"],
                              "Wachstum Zerfall":["Overviewseiten erstellen", "Maturaaufgaben", "lernen", "Lernkarteien erstellen"],
                              "Prozentrechnen":["lernen", "Lernspiele", "Overviewseiten erstellen", "Lernkarteien erstellen"],
                              "Zahlenbereiche":["Lernkarteien erstellen", "lernen", "Overviewseiten erstellen"],
                              "Venn-Diagramme":["Overviewseiten erstellen", "Maturaaufgaben", "lernen", "Lernkarteien erstellen"]}




sample= random.choice(list(maturathemen_mit_lernweise))



print ("Was soll ich heute lernen?")
print('Maturathemen mit Lernart:', sample, " - ", maturathemen_mit_lernweise[sample])
Was muss ich bitte noch festlegen das mir nur eine lernweise angezeigt wird?
Benutzeravatar
__blackjack__
User
Beiträge: 14051
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

``maturathemen_mit_lernweise[sample]`` ist eine Liste mit Lernweisen. Wie man aus einer Liste einen zufälligen Wert auswählt, hast kannst Du doch bereits.

`sample` ist übrigens kein guter Name. Das ist ein `thema` oder `maturathema`.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
ostigirl
User
Beiträge: 9
Registriert: Montag 18. November 2019, 11:35

Guten Morgen!
Das Problem ist die Ausgabe:

Maturathemen mit Lernart: lineare Funktion - ['Lernkarteien erstellen', 'Overviewseiten erstellen', 'lernen', 'Maturaaufgaben']

Ich will nur einen Eintrag und das dieser Bereich auch durchgemischt wird.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Lies dir noch einmal den Beitrag von __blackjack__ durch, darin hat er deine frage beantwortet.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

es fehlt noch ein random.choice für maturathemen_mit_lernweise[sample], also

Code: Alles auswählen

random.choice(maturathemen_mit_lernweise[sample])
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Ergänzung: Wenn du ein Dictionary hast und den Key kennst, dann kannst du daraus die Value ermitteln. In dem Fall ist Value eine Liste, also ['Lernkarteien erstellen', 'Overviewseiten erstellen', 'lernen', 'Maturaaufgaben'].

Also liefert dir der Aufruf mein_dict[key] die Value (in dem Fall eine Liste) zurück.

random.choice ist eine Funktion, welche eine Liste als Parameter erwartet und aus dieser dann ein Element zurückgibt.

Code: Alles auswählen

dict = {key:value}
ostigirl
User
Beiträge: 9
Registriert: Montag 18. November 2019, 11:35

Ja leider, egal was ich mit random.choice versuche funktioniert leider nicht.
Es ist nicht möglich einen einzelnen Value von mein Dict auszugeben.

Code: Alles auswählen

import random 

maturathemen_mit_lernweise = {"Wurzelfunktion":["Lernkarteien erstellen", "lernen", "Overviewseiten erstellen", "Maturaaufgaben"],
                              "lineare Funktion":["Lernkarteien erstellen", "Overviewseiten erstellen", "lernen","Maturaaufgaben"],
                              "quadratische Funktion":["lernen", "Maturaaufgaben", "Overviewseiten erstellen", "Lernspiele", "Lernkarteien erstellen"],
                              "Wachstum Zerfall":["Overviewseiten erstellen", "Maturaaufgaben", "lernen", "Lernkarteien erstellen"],
                              "Prozentrechnen":["lernen", "Lernspiele", "Overviewseiten erstellen", "Lernkarteien erstellen"],
                              "Zahlenbereiche":["Lernkarteien erstellen", "lernen", "Overviewseiten erstellen"],
                              "Venn-Diagramme":["Overviewseiten erstellen", "Maturaaufgaben", "lernen", "Lernkarteien erstellen"]}
Soll ich meine Listeneinträge verändern?
Vielleicht habt ihr noch einen Tipp?
Benutzeravatar
__blackjack__
User
Beiträge: 14051
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@ostigirl: Was Du machen musst wurde jetzt mehrfach in Worten gesagt und einmal sogar exakt mit Code gezeigt den Du einfach nur in Dein Programm übernehmen müsstest. Was genau verstehst Du denn daran nicht?
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
ostigirl
User
Beiträge: 9
Registriert: Montag 18. November 2019, 11:35

Code: Alles auswählen


import random 

maturathemen_mit_lernweise = {"Wurzelfunktion":["Lernkarteien erstellen", "lernen", "Overviewseiten erstellen", "Maturaaufgaben"],
                              "lineare Funktion":["Lernkarteien erstellen", "Overviewseiten erstellen", "lernen","Maturaaufgaben"],
                              "quadratische Funktion":["lernen", "Maturaaufgaben", "Overviewseiten erstellen", "Lernspiele", "Lernkarteien erstellen"],
                              "Wachstum Zerfall":["Overviewseiten erstellen", "Maturaaufgaben", "lernen", "Lernkarteien erstellen"],
                              "Prozentrechnen":["lernen", "Lernspiele", "Overviewseiten erstellen", "Lernkarteien erstellen"],
                              "Zahlenbereiche":["Lernkarteien erstellen", "lernen", "Overviewseiten erstellen"],
                              "Venn-Diagramme":["Overviewseiten erstellen", "Maturaaufgaben", "lernen", "Lernkarteien erstellen"]}




maturathema= random.choice(list(maturathemen_mit_lernweise))
random.choice(maturathemen_mit_lernweise[sample])


print ("Was soll ich heute lernen?")
print('Maturathemen mit Lernart:', maturathema, " - ", maturathemen_mit_lernweise[sample])

Ich stehe irgendwie auf der Leitung :-)
random.choice(maturathemen_mit_lernweise[sample])
Mit dieser Zeile habe ich meine Problem!
[sample] ist das eine Variable oder teil der random syntax
Zizibee
User
Beiträge: 229
Registriert: Donnerstag 12. April 2007, 08:36

<sample> ist dein Key im Dictionary, also z.B. "Wurzelfunktion" oder "Zahlenbereiche"
ostigirl
User
Beiträge: 9
Registriert: Montag 18. November 2019, 11:35

Wie kann ich den mehrere Keys zusammenhängen in einer Zeile?

Code: Alles auswählen

lernart= random.choice(maturathemen_mit_lernweise["Wurzelfunktion", "Prozentrechnen"])
Das funktioniert leider nicht.
Zizibee
User
Beiträge: 229
Registriert: Donnerstag 12. April 2007, 08:36

Sorry, ich dachte du wolltest nun die Lernart heraus suchen.
Wie du die Maturathemen zufällig wählst, hatte Jankie ja schon erklärt.
Benutzeravatar
__blackjack__
User
Beiträge: 14051
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@ostigirl: Das geht gar nicht. Du kannst zwar Tupel als Schlüssel verwenden, aber dann muss auch dieses Tupel als Schlüssel im Wörterbuch stehen. Was sollte das was Du da geschrieben hast denn Ergebnis liefern und warum?

Es gibt übrigens keine random Syntax. `random` ist ein Modul und `choice()` ist eine Funktion. Die Syntax ist wie bei jedem anderen Modul und jeder anderen Funktion auch. Bei einem Funktionsaufruf wird erst der Wert vor den Aufrufklammern ausgewertet, also `random.choice`, dann die Argumente, also `maturathemen_mit_lernweise[sample]`, und mit dem Ergebnis wird dann das aufgerufen was `random.choice` ergeben hat. Also würde wenn es nicht beim Auswerten des Arguments einen `NameError` geben würde. Denn bei `maturathemen_mit_lernweise[sample]` wird erst der Ausdruck ausgewertet auf den der Schlüsselzugriff gemacht werden soll (`maturathemen_mit_lernweise` → ein Wörterbuch) und dann der Schlüssel — nur das `sample` nicht definiert wurde.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
ostigirl
User
Beiträge: 9
Registriert: Montag 18. November 2019, 11:35

Ja, Danke zu 95 % ist mein Programm fehlerfrei. Denn Rest werde ich dann mit meiner Programmierlehrerin Face to Face klären im Dezember.
Jankie
User
Beiträge: 592
Registriert: Mittwoch 26. September 2018, 14:06

Vielleicht hilft dir ja der fertige Code zu verstehen:

Code: Alles auswählen

import random

maturathemen_mit_lernweise = {"Wurzelfunktion":["Lernkarteien erstellen", "lernen", "Overviewseiten erstellen", "Maturaaufgaben", "Lernspiele"],
                              "lineare Funktion":["Lernkarteien erstellen", "lernen","Maturaaufgaben"],
                              "quadratische Funktion":["lernen", "Overviewseiten erstellen", "Lernspiele"],
                              "Wachstum Zerfall":["Overviewseiten erstellen", "Maturaaufgaben", "Lernspiele"],
                              "Prozentrechnen":["lernen", "Lernspiele", "Overviewseiten erstellen"],
                              "Zahlenbereiche":["Lernkarteien erstellen", "Overviewseiten erstellen", "Lernspiele"],
                              "Venn-Diagramme":["Overviewseiten erstellen", "Maturaaufgaben", "Lernspiele"]}

thema = random.choice(list(maturathemen_mit_lernweise.keys()))
lernweise = random.choice(maturathemen_mit_lernweise[thema])

print(f"Das Thema ist '{thema}' und die Lernweise ist '{lernweise}'")
Antworten