Gewinnspiel

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.
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Hallo alle miteinander,

@nezzcarth)

Ich habe versucht alle Ratschläge zu beherzigen. Nur wenn ich diese nicht kapiere, kann ich sie auch dementsprechend nicht umsetzen. Daher suche ich jetzt um ein neues Buch, um all dies viel besser und mit möglichst wenig Hilfe alleine besser zu bewältigen. Wie Du schon sagtest, habe ich noch nicht die Grundelemente der Programmierung nicht verstanden, jedoch versuche ich durch Übung und durch Durchhaltevermögen mich darin zu bessern. Wie schon das alte Sprichwort besagt: Übung macht den Meister. Und ich hoffe, es klappt bei mir genau so gut wie bei einigen Leuten, die solch ein Projekt erfolgreich abgeschlossen haben.

@Sirius3)

Ich werde mal sehen, wie ich das mit den Themen gut umsetzen kann. Ich drucke mir erstmal das Tutorial über Menü-Entwürfe aus, das mir Hyperion empfohlen hat.

@snafu)

Ich gebe mein Bestes, dass alles in ein Programm unterzubringen. Jedoch verstehe ich noch nicht genau, wie man korrekten Code von Anfang an schreiben kann und mir fehlt es an Erfahrung. Ich kann auch nicht meine Kenntnisse einschätzen. Echt keine Ahnung. Aber wie schon gesagt, ich will üben um besser zu werden. Und ich werde ein Buch kaufen, dass besser ist als dieses Galileo Computing Buch. Ich hoffe, dass ich mit meinem neuem Buch besser zurecht finde und dadurch mir das Programmieren etwas leichter fällt. Ich denke auch, dass das Aufteilen von Programmcode nicht allzuleicht wird, dennoch werde ich sicherlich mein Bestes geben.

@anogayales)

Du willst nicht wissen, was ich mir sonst noch zu kompliziert mache. Meine größte Sorge bleibt jedoch, dass ich 100te Zeilen von Code geschrieben habe und dann merke, dass das Unsinn war. Aber durch diesen Unsinn lernt man auch viel. Ich werde darüber nachdenken. Das Problem ist, dass ich da alles perfekt machen will.
Benutzeravatar
snafu
User
Beiträge: 6881
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Auf jeden Fall muss dir klar werden, welchen Zweck das Vorhandensein von Funktionen in einem Programm hat. Du musst also zum einen das Warum verstehen und zum anderen natürlich auch das Wie. Letzteres meint unter anderem: Wie genau macht man das üblicherweise mit der Parameterübergabe (erstmaliges Kennenlernen des Vorgehens)? Was gibt man als Rückgabewert für die Funktion aus? Wie findet man einen guten Namen für die Funktion? Wann ist es sinnvoll, übergebene Argumente explizit zu testen und ggf einen Fehler zu werfen und wann hingegen kann man die Prüfung auch weglassen? Was genau fällt eigentlich in den Zuständigkeitsbereich der Funktion (das sollte nämlich auch nicht zuuu viel werden)? Und so weiter...

Wie du siehst, kommt da einiges auf dich zu. Programmieren hat eben auch viel mit Planung und Strukturierung zu tun. Wobei man ehrlicherweise anmerken muss, dass auch "alte Hasen" nicht unbedingt immer die perfekte Struktur in ihrem Programm haben. Du hattest das mit dem Perfektionismus ja auch schon angesprochen. Den gibt es einfach nicht. Struktur ist zwar gut und wichtig, aber noch wichtiger ist es, überhaupt mal ein lauffähiges Programm zu haben. Verbesserungen kann man auch nachträglich einarbeiten. Man sollte halt nur nicht allzu planlos an die Sache rangehen. Und man sollte in kleinen Schritten entwickeln und nicht gleich alles auf einmal haben wollen.
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Hi,
Auf jeden Fall muss dir klar werden, welchen Zweck das Vorhandensein von Funktionen in einem Programm hat. Du musst also zum einen das Warum verstehen und zum anderen natürlich auch das Wie. Letzteres meint unter anderem: Wie genau macht man das üblicherweise mit der Parameterübergabe (erstmaliges Kennenlernen des Vorgehens)? Was gibt man als Rückgabewert für die Funktion aus? Wie findet man einen guten Namen für die Funktion? Wann ist es sinnvoll, übergebene Argumente explizit zu testen und ggf einen Fehler zu werfen und wann hingegen kann man die Prüfung auch weglassen? Was genau fällt eigentlich in den Zuständigkeitsbereich der Funktion (das sollte nämlich auch nicht zuuu viel werden)? Und so weiter...
Da liegt das Hauptproblem, denke ich.
Wie du siehst, kommt da einiges auf dich zu. Programmieren hat eben auch viel mit Planung und Strukturierung zu tun. Wobei man ehrlicherweise anmerken muss, dass auch "alte Hasen" nicht unbedingt immer die perfekte Struktur in ihrem Programm haben. Du hattest das mit dem Perfektionismus ja auch schon angesprochen. Den gibt es einfach nicht. Struktur ist zwar gut und wichtig, aber noch wichtiger ist es, überhaupt mal ein lauffähiges Programm zu haben. Verbesserungen kann man auch nachträglich einarbeiten. Man sollte halt nur nicht allzu planlos an die Sache rangehen. Und man sollte in kleinen Schritten entwickeln und nicht gleich alles auf einmal haben wollen.
Zu wenig Planung geht in den Eimer, zu große Planung wirds zu kompliziert. In der Mitte kann man sich gut treffen. :mrgreen:
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Yippieh, neuer Code (angepasst zu meindem derzeitgen Wissensstand!):

Code: Alles auswählen

#New Quiz
import easygui,sys

ende = 1
schwierigkeit = 'Mittel' #defaultwert
versuche = 3
punkte = 0

def Versuche():
    if versuche == 0:
        easygui.msgbox("Zu viele Versuche verbaucht! Sie sind für das nächste Thema nicht zugelassen!")
        return sys.exit(0)
    

while ende == 1:
    menue = easygui.buttonbox("Welche Option wünschen Sie denn?", choices = ['Spielen', 'Schwierigkeiten', 'Exit']) 
    # Abfrage , unter welcher Schwierigkeit gespielt werden soll
    if menue == 'Schwierigkeiten':
        schwierigkeit = easygui.buttonbox("Welche Option wünschen Sie denn?", choices = ['Leicht', 'Mittel', 'Schwierig'])
    if menue == 'Spielen':
        themen_liste = easygui.choicebox("Welche Themen bevorzugen Sie denn?", choices = ['Computer', 'Schule', 'Wirtschaft', 'Konsole', 'Alltag', 'Natur'])
        if schwierigkeit == 'Leicht':
            if themen_liste == 'Computer':
                frage1 = easygui.choicebox("Was ist eine Programmiersprache?", choices = ['Vogel','Python','Schlangenphalitis'])
                if frage1 == 'Python':
                    easygui.msgbox("Das war eine richtige Antwort! Dafür bekommen Sie 100 Punkte!")
                    punkte = punkte + 100
                else:
                    easygui.msgbox("Das war eine falsche Antwort!")
                    versuche = versuche - 1
                frage2 = easygui.choicebox("Was ist ein Firefox?", choices = ['Internetexplorer', 'Internetanschluss', 'Internetkabel'])
                if frage2 == 'Internetexplorer':
                    easygui.msgbox("Das war eine richtige Antwort! Dafür bekommen Sie 100 Punkte!")
                    punkte = punkte + 100
                else:
                    easygui.msgbox("Das war eine falsche Antwort!")
                    versuche = versuche - 1
                frage3 = easygui.choicebox("Was ist ein Computervirus?", choices = ['Böse Software', 'Zeitangabe', 'Desktop'])
                if frage3 == 'Böse Software':
                    easygui.msgbox("Das war eine richtige Antwort! Dafür bekommen Sie 100 Punkte!")
                    punkte = punkte + 100
                else:
                    easygui.msgbox("Das war eine falsche Antwort!")
                    versuche = versuche - 1
                Versuche()
                frage4 = easygui.choicebox("Was ist C++?", choices = ['Schlangengift', 'Programmiersprache', 'Python'])
                if frage4 == 'Programmiersprache':
                    easygui.msgbox("Das war eine richtige Antwort! Dafür bekommen Sie 100 Punkte!")
                    punkte = punkte + 100
                else:
                    easygui.msgbox("Das war eine falsche Antwort!")
                    versuche = versuche - 1
                
                frage5 = easygui.choicebox("Was ist eine Maus?", choices = ['Steuerungsgerät', 'Landratte', 'Hacks'])

                

    if menue == 'Exit':
        ende = 0
                

print versuche, "Versuche"
print punkte, "Punkte" 

        

    



Es läuft alles wie Butter!

EDIT: Hab den Code etwas angepasst.
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Neuer Code:

Code: Alles auswählen

#New Quiz
import easygui,sys

ende = 1
schwierigkeit = 'Mittel' #defaultwert
versuche = 3
punkte = 0

def Versuche():
    if versuche == 0:
        easygui.msgbox("Zu viele Versuche verbaucht! Sie sind für das nächste Thema nicht zugelassen!")
        #return sys.exit(0)
    

while ende == 1:
    menue = easygui.buttonbox("Welche Option wünschen Sie denn?", choices = ['Spielen', 'Schwierigkeiten', 'Exit']) 
    # Abfrage , unter welcher Schwierigkeit gespielt werden soll
    if menue == 'Schwierigkeiten':
        schwierigkeit = easygui.buttonbox("Welche Option wünschen Sie denn?", choices = ['Leicht', 'Mittel', 'Schwierig'])
    if menue == 'Spielen':
        themen_liste = easygui.choicebox("Welche Themen bevorzugen Sie denn?", choices = ['Computer', 'Schule', 'Wirtschaft', 'Konsole', 'Alltag', 'Natur'])
        if schwierigkeit == 'Leicht':
            if themen_liste == 'Computer':
                frage1 = easygui.choicebox("Was ist eine Programmiersprache?", choices = ['Vogel','Python','Schlangenphalitis'])
                if frage1 == 'Python':
                    easygui.msgbox("Das war eine richtige Antwort! Dafür bekommen Sie 100 Punkte!")
                    punkte = punkte + 100
                else:
                    easygui.msgbox("Das war eine falsche Antwort!")
                    versuche = versuche - 1
                frage2 = easygui.choicebox("Was ist ein Firefox?", choices = ['Browser', 'Internetanschluss', 'Internetkabel'])
                if frage2 == 'Browser':
                    easygui.msgbox("Das war eine richtige Antwort! Dafür bekommen Sie 100 Punkte!")
                    punkte = punkte + 100
                else:
                    easygui.msgbox("Das war eine falsche Antwort!")
                    versuche = versuche - 1
                frage3 = easygui.choicebox("Was ist ein Computervirus?", choices = ['Böse Software', 'Zeitangabe', 'Desktop'])
                if frage3 == 'Böse Software':
                    easygui.msgbox("Das war eine richtige Antwort! Dafür bekommen Sie 100 Punkte!")
                    punkte = punkte + 100
                else:
                    easygui.msgbox("Das war eine falsche Antwort!")
                    versuche = versuche - 1
                Versuche()
                frage4 = easygui.choicebox("Was ist C++?", choices = ['Schlangengift', 'Programmiersprache', 'Python'])
                if frage4 == 'Programmiersprache':
                    easygui.msgbox("Das war eine richtige Antwort! Dafür bekommen Sie 100 Punkte!")
                    punkte = punkte + 100
                else:
                    easygui.msgbox("Das war eine falsche Antwort!")
                    versuche = versuche - 1
                Versuche()
                frage5 = easygui.choicebox("Was ist eine Maus?", choices = ['Steuerungsgerät', 'Landratte', 'Hacks'])
                if frage5 == 'Steuerungsgerät':
                    easygui.msgbox("Das war eine richtige Antwort! Dafür bekommen Sie 100 Punkte!")
                    punkte = punkte + 100
                else:
                    easygui.msgbox("Das war eine falsche Antwort!")
                    versuche = versuche - 1
                Versuche()
                frage6 = easygui.choicebox("Was ist Fifa13?", choices = ['Troll', 'Telefon', 'Computerspiel'])
                if frage6 == 'Computerspiel':
                    easygui.msgbox("Das war eine richtige Antwort! Dafür bekommen Sie 100 Punkte!")
                    punkte = punkte + 100
                else:
                    easygui.msgbox("Das war eine falsche Antwort!")
                    versuche = versuche - 1
                Versuche()
                frage7 = easygui.choicebox("Taskmanager hat Kontrolle über ...", choices = ['Prozesse', 'Gerichtsverhandlung', 'IRONMAN'])
                if frage7 == 'Prozesse':
                    easygui.msgbox("Das war eine richtige Antwort! Dafür bekommen Sie 100 Punkte!")
                    punkte = punkte + 100
                else:
                    easygui.msgbox("Das war eine falsche Antwort!")
                    versuche = versuche - 1
                Versuche()
                frage8 = easygui.choicebox("Was würde ich eher hacken?", choices = ['127.0.0.1', 'anderen Computer', 'meine Oma'])
                if frage8 == 'anderen Computer':
                    easygui.msgbox("Das war eine richtige Antwort! Dafür bekommen Sie 100 Punkte!")
                    punkte = punkte + 100
                else:
                    easygui.msgbox("Das war eine falsche Antwort!")
                    versuche = versuche - 1
                Versuche()
                frage9 = easygui.choicebox("XBOX360 Kontroller", choices = ['Steuerungskontroller', 'Selbstmordwaffe', 'Ryko-ErschlagMichDoch'])
                if frage9 == 'Steuerungskontroller':
                    easygui.msgbox("Das war eine richtige Antwort! Dafür bekommen Sie 100 Punkte!")
                    punkte = punkte + 100
                else:
                    easygui.msgbox("Das war eine falsche Antwort!")
                    versuche = versuche - 1
                Versuche()
                frage10 = easygui.choicebox("Was ist ein Desktop?", choices = ['Maus', 'Tastatur', 'Homescreen'])
                if frage10 == 'Homescreen':
                    easygui.msgbox("Das war eine richtige Antwort! Dafür bekommen Sie 100 Punkte!")
                    punkte = punkte + 100
                else:
                    easygui.msgbox("Das war eine falsche Antwort!")
                    versuche = versuche - 1
                Versuche()
                    
                

                

    if menue == 'Exit':
        ende = 0
                

print versuche, "Versuche"
print punkte, "Punkte" 

Thema Computer vollständig (nur auf leichteste Schwierigkeit)

Nun mein Plan:

- jetzt für mittel und schwierig das Thema Computer behandeln , die anderen vorerst ignorieren
- wenn ich Funktionen kann, werde ich den Code mit Hilfe von Funktionen abkürzen
- wenn ich Klassen beherrsche, werde ich den Code mit Hilfe von Klassen abkürzen
- danach kommt Grafik + Sound
- und danach habe ich mein Projekt

Dieser Plan ist simpel, dabei lernt man was. Ist aber am Anfang recht aufwendig.

Was haltet Ihr vom Code?
Sirius3
User
Beiträge: 18299
Registriert: Sonntag 21. Oktober 2012, 17:20

@Gary123456: Du hast ein schönes Beispiel gemacht, wie wichtig es ist, eine gute Datenstruktur zu haben. Also füge als ersten Punkt in Deinem Plan lernen von Datenverarbeitung hinzu. Versuche als nächsten Schritt alle Fragen und Auswahllisten und Antworten als Konstanten vor dem eigentlichen Programm zu definieren.
Frage: Wie schwierig ist es eine weitere Frage hinzuzufügen?
Antwort: Ungefähr 8 Zeilen Code.
Ziel: genau ein Eintrag in einer Liste.
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Dafür habe ich das andere Buch: Da wird Datenstruktur super erklärt :)
Sirius3
User
Beiträge: 18299
Registriert: Sonntag 21. Oktober 2012, 17:20

Dann versuchs doch mal umzusetzen :P
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Versuche es gerade umzusetzen. Ich speichere alle Fragen in einer Liste und gebe Sie dann wieder aus :) Code wird zwar minimal kürzer, aber es ist ein kleiner Schritt getan. Ein weiterer Schritt für die Zukunft :) Später folgt der Code :)
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Code: Alles auswählen

#New Quiz
import easygui,sys

ende = 1
schwierigkeit = 'Mittel' #defaultwert
versuche = 3
punkte = 0

big_liste = [['Spielen', 'Schwierigkeiten', 'Exit'],['Leicht', 'Mittel', 'Schwierig']]
fragen = ["Welche Themen bevorzugen Sie denn?", "Was ist eine Programmiersprache?","Was ist ein Firefox?", "Was ist ein Computervirus?", "Was ist C++", "Was ist eine Maus?", "Was ist Fifa13?", "Taskmanager hat Kontrolle über ...", \
          "Was würde ich eher hacken?", "XBOX360 Kontroller", "Was ist ein Desktop?"]
antworten = [['Computer', 'Schule', 'Wirtschaft', 'Konsole', 'Alltag', 'Natur'],['Vogel','Python','Schlangenphalitis'], ['Browser', 'Internetanschluss', 'Internetkabel'], ['Böse Software', 'Zeitangabe', 'Desktop'],\
             ['Schlangengift', 'Programmiersprache', 'Python'], ['Steuerungsgerät', 'Landratte', 'Hacks'], ['Troll', 'Telefon', 'Computerspiel'], ['Prozesse', 'Gerichtsverhandlung', 'IRONMAN'],['127.0.0.1', 'anderen Computer', 'meine Oma'],\
             ['Steuerungskontroller', 'Selbstmordwaffe', 'Ryko-ErschlagMichDoch'], ['Maus', 'Tastatur', 'Homescreen']]
richtigkeit = ["Das war eine falsche Antwort!", "Das war eine richtige Antwort! Dafür bekommen Sie 100 Punkte!"]
Optionen = ["Welche Option wünschen Sie denn?"]

def Versuche():
    if versuche == 0:
        easygui.msgbox("Zu viele Versuche verbaucht! Sie sind für das nächste Thema nicht zugelassen!")
        #return sys.exit(0)
    

while ende == 1:
    menue = easygui.buttonbox(Optionen[0], choices = big_liste[0]) 
    # Abfrage , unter welcher Schwierigkeit gespielt werden soll
    if menue == 'Schwierigkeiten':
        schwierigkeit = easygui.buttonbox(Optionen[0], choices = big_liste[1])
    if menue == 'Spielen':
        themen_liste = easygui.choicebox(fragen[0], choices = antworten[0])
        if schwierigkeit == 'Leicht':
            if themen_liste == 'Computer':
                frage1 = easygui.choicebox(fragen[1], choices = antworten[1])
                if frage1 == 'Python':
                    easygui.msgbox(richtigkeit[1])
                    punkte = punkte + 100
                elif frage1 == 'Cancel':
                    ende = 0
                else:
                    easygui.msgbox(richtigkeit[0])
                    versuche = versuche - 1
                frage2 = easygui.choicebox(fragen[2], choices = antworten[2])
                if frage2 == 'Browser':
                    easygui.msgbox(richtigkeit[1])
                    punkte = punkte + 100
                else:
                    easygui.msgbox(richtigkeit[0])
                    versuche = versuche - 1
                frage3 = easygui.choicebox(fragen[3], choices = antworten[3])
                if frage3 == 'Böse Software':
                    easygui.msgbox(richtigkeit[1])
                    punkte = punkte + 100
                else:
                    easygui.msgbox(richtigkeit[0])
                    versuche = versuche - 1
                Versuche()
                frage4 = easygui.choicebox(fragen[4], choices = antworten[4])
                if frage4 == 'Programmiersprache':
                    easygui.msgbox(richtigkeit[1])
                    punkte = punkte + 100
                else:
                    easygui.msgbox(richtigkeit[0])
                    versuche = versuche - 1
                Versuche()
                frage5 = easygui.choicebox(fragen[5], choices = antworten[5])
                if frage5 == 'Steuerungsgerät':
                    easygui.msgbox(richtigkeit[1])
                    punkte = punkte + 100
                else:
                    easygui.msgbox(richtigkeit[0])
                    versuche = versuche - 1
                Versuche()
                frage6 = easygui.choicebox(fragen[6], choices = antworten[6])
                if frage6 == 'Computerspiel':
                    easygui.msgbox(richtigkeit[1])
                    punkte = punkte + 100
                else:
                    easygui.msgbox(richtigkeit[0])
                    versuche = versuche - 1
                Versuche()
                frage7 = easygui.choicebox(fragen[7], choices = antworten[7])
                if frage7 == 'Prozesse':
                    easygui.msgbox(richtigkeit[1])
                    punkte = punkte + 100
                else:
                    easygui.msgbox(richtigkeit[0])
                    versuche = versuche - 1
                Versuche()
                frage8 = easygui.choicebox(fragen[8], choices = antworten[8])
                if frage8 == 'anderen Computer':
                    easygui.msgbox(richtigkeit[1])
                    punkte = punkte + 100
                else:
                    easygui.msgbox(richtigkeit[0])
                    versuche = versuche - 1
                Versuche()
                frage9 = easygui.choicebox(fragen[9], choices = antworten[9])
                if frage9 == 'Steuerungskontroller':
                    easygui.msgbox(richtigkeit[1])
                    punkte = punkte + 100
                else:
                    easygui.msgbox(richtigkeit[0])
                    versuche = versuche - 1
                Versuche()
                frage10 = easygui.choicebox(fragen[10], choices = antworten[10])
                if frage10 == 'Homescreen':
                    easygui.msgbox(richtigkeit[1])
                    punkte = punkte + 100
                else:
                    easygui.msgbox(richtigkeit[0])
                    versuche = versuche - 1
                Versuche()
                    
                

                

    if menue == 'Exit':
        ende = 0
                

print versuche, "Versuche"
print punkte, "Punkte" 
Das ist jetzt eine ganz primitve Lösung. Jedoch kann man das schon als Datenstruktur ansehen meiner Meinung nach. Werde mir jetzt das Thema Dictionary näher betrachten, denn ich denke, dass ist genau das richtige, was ich suche!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Naja, fass mal `fragen` und `antworten` in eine Datenstruktur zusammen:

Code: Alles auswählen

fragen = [("Was ist eine Programmiersprache?", ['Vogel','Python','Schlangenphalitis'])]
Und du hast die Datenstruktur eigentlich nicht genutzt, da du je trotz der Datenstruktur zig Zeilen schreiben musst, damit die Frage dargestellt wird. Dein Ziel sollte sein: um eine neue Frage hinzuzfügen, sollte es nur notwendig sein, die Datenstruktur mit den Fragen zu verändern, nichts weiter.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Leonidas, Da hast Du recht. Datenstruktur ist eine Art, Daten in dem Programm zu speichern und darzustellen. Es bezieht sich auf Art, wie die Originisation in einem Programm aussieht!
Daher doch eine Datenstruktur, weil ich Daten mit Hife einer Liste gespeichert und dargestellt habe. Nur ist sie sehr primitiv und hilft mir nicht weiter.

Daher werde ich das Programm neu anfangen.

Zu Deinem Beispiel: Ich fände Listen in Listen besser :)

Aber vielen, vielen Dank, ich denke ich habe damit viel geschafft!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Gary123456 hat geschrieben:Zu Deinem Beispiel: Ich fände Listen in Listen besser :)
Listen werden verwendet um viele gleichartige Dinge zu speichern, eben sowas wie die Fragen oder die Antwortmöglichkeiten, also prinzipiell wenn man beliebig viele Werte hinzufügen wollte. Wenn man aber verschiedenartige Typen hat, wie in meinem Beispiel die Zuordnung von Frage (String) zu Antwortmöglichkeiten (Liste von Strings), also ein 2-Tupel welches immer genau zwei Elemente enthält, dann finde ich Tupel besser.

Das ist übrigens auch eine Praxis die in einer Reihe von anderen Sprachen angewendet wird, von daher würde ich sagen so in Python zu verfahren ist durchaus empfehlenswert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
snafu
User
Beiträge: 6881
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Gary123456 hat geschrieben:Zu Deinem Beispiel: Ich fände Listen in Listen besser :)
Ich nicht. Ich verstehe Listen grundsätzlich als Datenstruktur mit einer variablen Anzahl an Elementen. Und an der Stelle, wo Leonidas den Tupel gewählt hat, ist ja sicherlich eher gemeint, dass weitere Frage-Anwort-Pärchen nach dem gezeigten Muster gebildet werden sollen - also der fixen Anzahl von 2 Elementen. Ich würde an der Stelle jetzt nicht erwarten, dass als nächstes plötzlich ein Tupel mit 5 Elementen oder so kommt. Wohl aber kann die Anzahl an möglichen Antworten von Frage zu Frage variieren, da es sich dort ja wieder um Listen handelt.

Hält man sich an diese Regeln bzw Interpretationen, dann hat man eigentlich schon implizit eine kleine Datenstruktur geschaffen. Wobei sich im Falle von 2-elementrigen Pärchen auch der Datentyp Wörterbuch (a.k.a. `dict`) meistens ganz gut anbietet. Sobald es umfangreicher wird, sollte man aber besser eigene Typen definieren und verwenden, weil verschachtelte Standardtypen ab einem gewissen Punkt einfach zu umständlich in der Handhabung werden. Für kleinere Aufgaben sind sie aber wie gesagt ganz praktisch.

Ich finde, man weiß das Vorhandensein von Tupeln besonders zu schätzen, wenn man mal in einer Sprache programmiert, welche Tupel nicht von Haus aus anbietet. Da muss man dann für jede Funktion, die mehr als einen Wert in einem Rutsch ausgeben soll (im Sinne von Pärchen), vorab einen eigenen Typen entwerfen und diesen dann benutzen, was manchmal wirklich nervig sein kann.
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

Danke!

Ich glaube, ich habs einigermaßen geschafft, eine Datenstruktur anzuwenden.

Code: Alles auswählen

#New Quiz
import easygui, sys, random
#                                   ELEMENT0                                                                          ELEMENT1
fragen1 = [("Was ist Fifa 13?", ["Ein Computerspiel", "Eine Computeruhr", "Eine Computermaus"]), ("Was ist ein Lautsprecher?", ["Ein Gamecontroller", "Eine Tastatur", "Eine Soundausgabe"]),\
#                                 ELEMENT2
           ("Was ist ein Bildschirm?",["Eine Videoausgabe", "Eine Soundausgabe", "Eine Computermaus"])]
optionen = [("Themen", ['Computer', 'Schule', 'Wirtschaft', 'Konsole', 'Alltag', 'Natur']), ('Spielen', 'Schwierigkeiten', 'Exit'), ("Welche Option wünschen Sie denn?"), ('Leicht', 'Mittel', 'Schwierig')]


punkte = 0
schwierigkeiten = 'Mittel'
ende = 1


while ende == 1:
    menue = easygui.buttonbox(optionen[2], choices = optionen[1])
    if menue == optionen[1][0]:
        themen = easygui.buttonbox(optionen[2], choices = optionen[0][1][:])
        if schwierigkeiten == 'Leicht':
            if themen == optionen[0][1][0]:
                frage1 = easygui.buttonbox(fragen1[0][0], choices = fragen1[0][1][:])
                frage2 = easygui.buttonbox(fragen1[1][0], choices = fragen1[1][1][:])
                frage3 = easygui.buttonbox(fragen1[2][0], choices = fragen1[2][1][:])
                if frage1 == fragen1[0][1][0]:
                    punkte += 100
                if frage2 == fragen1[1][1][2]:
                    punkte += 100
                if frage3 == fragen1[2][1][0]:
                    punkte += 100
    elif menue == optionen[1][1]:
        schwierigkeiten = easygui.buttonbox(optionen[2], choices = optionen[3])
    elif menue == optionen[1][2]:
        ende = 0
    


print punkte
Jetzt ist sogar der Vorteil, dass ich nich sage, welche Antwort richtig ist, weil man dadurch das Spiel ja öfters spielen kann! Ich könnte dann praktisch die Maximalpunktzahl angeben und die erreichte Punktzahl.

Dann meine Frage:

Was könnte man am Code besser machen? Und wenn das wieder keine Datenstruktur ist, dass könntet Ihr mir doch bitte ein kleines Beispiel zeigen. Das wäre super nett :)

Danke!
Benutzeravatar
snafu
User
Beiträge: 6881
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Hm, also bei den Fragen sind die Tupel konsistent (gleiche Anzahl an Elementen, gleiche Typen), bei den Optionen hingegen hast du die Hinweise wohl wieder in den Wind geschlagen. ^^
BlackJack

@Gary123456: Der Code ist immer noch nicht unabhängig von den Daten. Wenn Du eine weitere Frage hinzufügen willst, musst Du immer noch die Programmlogik erweitern statt nur die Liste mit den Fragen und Antworten.

Diese vielen Indexzugriffe sind auch unschön.

Die `optionen`-Liste verstehe ich nicht. Also warum das da so in der Struktur abgelegt ist. Das erscheint mir vollkommen willkührlich.
Gary123456
User
Beiträge: 318
Registriert: Dienstag 26. Februar 2013, 18:39

@BlackJack)

Dann habe ich einfach nur 0 Ahnung wie ich das anstellen soll.

@snafu)

Code: Alles auswählen

#New Quiz
import easygui, sys, random

fragen1 = [("Was ist Fifa 13?", ["Ein Computerspiel", "Eine Computeruhr", "Eine Computermaus"]), ("Was ist ein Lautsprecher?", ["Ein Gamecontroller", "Eine Tastatur", "Eine Soundausgabe"]),\
           ("Was ist ein Bildschirm?",["Eine Videoausgabe", "Eine Soundausgabe", "Eine Computermaus"])]
alle_themen = [("Themen", ['Computer', 'Schule', 'Wirtschaft', 'Konsole', 'Alltag', 'Natur'])]
optionen = [('Spielen', 'Schwierigkeiten', 'Exit'),('Leicht', 'Mittel', 'Schwierig')]
text = "Welche Option wünschen Sie sich?"


punkte = 0
schwierigkeiten = 'Mittel'
ende = 1


while ende == 1:
    menue = easygui.buttonbox(text, choices = optionen[0])
    if menue == optionen[0][0]:
        themen = easygui.buttonbox(text, choices = alle_themen[0][1])
        if schwierigkeiten == 'Leicht':
            if themen == alle_themen[0][1][0]:
                frage1 = easygui.buttonbox(fragen1[0][0], choices = fragen1[0][1][:])
                frage2 = easygui.buttonbox(fragen1[1][0], choices = fragen1[1][1][:])
                frage3 = easygui.buttonbox(fragen1[2][0], choices = fragen1[2][1][:])
                if frage1 == fragen1[0][1][0]:
                    punkte += 100
                if frage2 == fragen1[1][1][2]:
                    punkte += 100
                if frage3 == fragen1[2][1][0]:
                    punkte += 100
    elif menue == optionen[0][1]:
        schwierigkeiten = easygui.buttonbox(text, choices = optionen[1])
    elif menue == optionen[0][2]:
        ende = 0
jetzt habe ich zwei neue Listen erstellt mit jeweils zwei Elementen. Besser? Sonst versteh ichs einfach nicht.


Ich zerbrech mir grad echt den Kopf :shock:
Benutzeravatar
snafu
User
Beiträge: 6881
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Ich glaube, du hast das mit den Tupeln noch nicht so richtig verstanden. Vor allem geht es nicht darum, alles in die von Leonidas vorgeschlagene Form zu pressen. Auch geht es nicht darum, dass du immer exakt das machen sollst, was dir gesagt wird (und dies auch noch in einem Ausmaß, das so garnicht gemeint war), sondern dass du selber verstehst, warum welche Datenstrukturen an welchen Stellen sinnvoll sind.

Nichts für ungut, aber vielleicht solltest du es für heute gut sein lassen und mal ne Nacht drüber schlafen. Es ist nicht wirklich zielführend, wenn du hier alle halbe Stunde oder so etwas präsentierst, von dem du glaubst, dass es *jetzt aber* richtig sein müsste. Wie gesagt: Denke mehr über den Sinn diverser Tipps nach und weniger darüber, wie du eine bestimmte Vorgehensweise möglichst häufig im Programm anwenden kannst. Als Programmierer sollte man einfach wissen, wo genau ein bestimmter Datentyp geeignet erscheint. Immer nur das Schema F anzwenden, ist Blödsinn.
BlackJack

@Gary123456: Du hast im Code zum Beispiel welches die richtige Antwort ist. Wenn das in den Daten stehen würde, dann bräuchtest Du nicht für jede Frage eigenen Code der prüft ob die Antwort richtig war. Man könnte in den Daten zum Beispiel die richtige Antwort immer als erstes angeben und sie dann für den Benutzer in zufälliger Reihenfolge anzeigen. Damit er nicht immer mit der ersten Antwort die richtige sehen würde.

Ich würde auch erst einmal die unbenutzten Sachen rauswerfen. Verschiedene Themen und Schwierigkeitsstufen hast Du ja gar nicht. Wenn Du die einführst, dann wären das auch eher wieder *Daten*. Also dass man zum Beispiel nicht eine Liste mit Fragen hat, sondern ein Wörterbuch (`dict`) das Themennamen auf Listen mit Fragen zu dem entsprechenden Thema abbildet. Dann ist auch das hinzufügen von neuen Themen ohne Anderungen an der Programmlogik möglich. Genauso kann man mit der Schwierigkeit verfahren.
Antworten