Hilfe meine if statements funktionieren nicht

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.
Littlejofel
User
Beiträge: 17
Registriert: Mittwoch 23. April 2014, 16:39

Hallo, ich bin neu beim Programmieren und irgendwie funktionieren meine if statements nie (Ich benutze Python 2.7.6)


'

Code: Alles auswählen

Antwort1 = 'b'
print 'Willkommen zum Quiz'
print '___________________'
print 'Hier die erste frage :'

Frage1 = raw_input('Was ist eine Software?')
print 'a) Dateien'
print 'b) alle formen von Programmen'
print 'c) alles vom Computer das man anfassen kann'

if Antwort1 == Frage1:
   print 'Ja , ganz genau!'
else:
   print 'Leider nicht'
Kann mir das vieleicht irgendjemand erklären oder ein gutes Tutorial hinterlassen?

Danke im vorraus :)
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@Littlejofel
Was meinst Du mit "funktionieren nie"? Dein Beispiel jedenfalls funktioniert bis auf den Umstand, dass die möglichen Antworten zu spät angezeigt werden... :wink:

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Littlejofel
User
Beiträge: 17
Registriert: Mittwoch 23. April 2014, 16:39

mutetella hat geschrieben:@Littlejofel
Was meinst Du mit "funktionieren nie"? Dein Beispiel jedenfalls funktioniert bis auf den Umstand, dass die möglichen Antworten zu spät angezeigt werden... :wink:

mutetella
Erstmal danke für die schnelle antwort,

oft ist es so das bei meinen if statements die Falschen Antworten auf die Fragen als richtig erkannt werden , egal was ich eingebe oder es ist genau anders herum.

Wie sollte so ein if statement denn eigentlich richtig sein , in allen videos von anderen programmierern funktioniert alles einband frei , doch sobald ich es nachmache klappt irgendwie nix :(
BlackJack

@Littlejofel: Es gibt kein allgemeines „richtig”, was genau als Bedingung da hingeschrieben werden muss, hängt davon ab was man damit überprüfen möchte. Wie mutetella schon schrieb ist das Beispiel bis auf die Reihenfolge der Ausgabe der Frage und des Tests korrekt. Wenn Du uns korrekten Quelltext zeigst, können wir Dir auch nicht sagen wo der Fehler ist, weil da eben keiner ist. Und was Du sonst so schreibst — die Glaskugel ist gerade in der Reinigung. ;-)
Littlejofel
User
Beiträge: 17
Registriert: Mittwoch 23. April 2014, 16:39

BlackJack hat geschrieben:@Littlejofel: Es gibt kein allgemeines „richtig”, was genau als Bedingung da hingeschrieben werden muss, hängt davon ab was man damit überprüfen möchte. Wie mutetella schon schrieb ist das Beispiel bis auf die Reihenfolge der Ausgabe der Frage und des Tests korrekt. Wenn Du uns korrekten Quelltext zeigst, können wir Dir auch nicht sagen wo der Fehler ist, weil da eben keiner ist. Und was Du sonst so schreibst — die Glaskugel ist gerade in der Reinigung. ;-)
Ja aber wie kriege ich denn alles in die richtige reihenfolge xD Wenn etwas richtig ist kommt ja immer der Text für etwas falsches. Das ist doch das Thema um das es hier geht :(

Bild
mcdwerner
User
Beiträge: 113
Registriert: Donnerstag 7. Juli 2011, 14:27

@Littlejofel:
um zu wissen was da tatsächlich passiert, könntest Du Dir die interessanten Werte doch mal genauer ansehen, z.B. mit einem

Code: Alles auswählen

print f1
nach dem raw_input

Code: Alles auswählen

print f1 == "1 2"
#bzw
print f1 == "1"
funktioniert übrigens auch ;-)
BlackJack

@Littlejofel: Hast Du die Quelltextdatei vor dem Ausführen auch gespeichert? Im Bildschirmfoto ist das zum Beispiel nicht der Fall.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@Littlejofel
Du beginnst, Variablen zu nummerien (`frage1` ...). Stell' Dir einmal vor, Dein Quiz nimmt 'Trivial Pursuit' Dimensionen an... :wink: . Zudem ist das Feature, mehrere Antworten zu geben, sehr fehlerbehaftet, was ist z. B., wenn der Spieler '1, 2' oder '12' eingibt?
Ich habe Dir mal ein kleines Beispiel notiert, das zumindest diese Dinge umschifft:

Code: Alles auswählen

import re

tasks = (
    {'question': 'Was versteht man unter Software?',
     'choices': ('1) Dateien',
                 '2) Ausfuehrbare Programme',
                 '3) Computerbauteile'),
     'solutions': ('2',)},
    {'question': 'Welches gehoert zu meinen Leibgerichten?',
     'choices': ('1) Zwiebelrostbraten mit Kaesspatzn',
                 '2) Pizza Classico mit Kaese im Rand',
                 '3) McRib mit extra Westernsauce'),
     'solutions': ('1', '2', '3')}
)

def get_answers():
    return re.findall(r'(\d)', raw_input())

def validate_answers(answers, solutions, fully):
    '''`fully` = True: All answers must be correct
    `fully` = False: At least one answer must be correct '''
    results = [answer in solutions for answer in answers]
    if fully:
        return all(results) and sum(results) == len(solutions)
    return any(results)

def run():
    print 'Willkommen zum Quiz'
    print '___________________'
    for number, task in enumerate(tasks):
        print '\nHier die {}. Frage:'.format(number+1)
        print task['question']
        print '\n'.join(task['choices'])
        answers = get_answers()
        if validate_answers(answers, task['solutions'], fully=True):
            print 'Ja, ganz genau!'
        else:
            print 'Leider nicht'

if __name__ == '__main__':
    run()
mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

@mutetella: Eigentlich hat es sich hier im Board die Meinung etabliert, dass man die Lösung per Konvention an die erste Stelle der Antworten setzt und letztere vor dem Quzi mischt. Zudem ist das statische Durchnummerieren der Antworten auch unnötig :-)

Hier mein Beispiel dazu: Link
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

Da gibt's hier das Problem das es mehr als eine richtige Antwort geben kann.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

BlackJack hat geschrieben:Da gibt's hier das Problem das es mehr als eine richtige Antwort geben kann.
Oopsi... stimmt. Hatte ich übersehen!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Hyperion hat geschrieben:Eigentlich hat es sich hier im Board die Meinung etabliert, dass man die Lösung per Konvention an die erste Stelle der Antworten setzt und letztere vor dem Quzi mischt.
Eine "so gestalten wir ein Quiz"-Konvention hier im Board? Hä? Bin ich jetzt eine Spaßbremse oder verstehe ich das nicht?
Hyperion hat geschrieben:Zudem ist das statische Durchnummerieren der Antworten auch unnötig
Ja klar, aber ich wollte mein Beispiel nicht zu sehr verkomplizieren. Erstmal ging es mir nur darum, Littlejofel eine Möglichkeit zu zeigen, auf nummerierte Namen zu verzichten und mehrere mögliche Eingaben des Nutzers zu validieren.

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Littlejofel
User
Beiträge: 17
Registriert: Mittwoch 23. April 2014, 16:39

mutetella hat geschrieben:
Hyperion hat geschrieben:Eigentlich hat es sich hier im Board die Meinung etabliert, dass man die Lösung per Konvention an die erste Stelle der Antworten setzt und letztere vor dem Quzi mischt.
Eine "so gestalten wir ein Quiz"-Konvention hier im Board? Hä? Bin ich jetzt eine Spaßbremse oder verstehe ich das nicht?
Hyperion hat geschrieben:Zudem ist das statische Durchnummerieren der Antworten auch unnötig
Ja klar, aber ich wollte mein Beispiel nicht zu sehr verkomplizieren. Erstmal ging es mir nur darum, Littlejofel eine Möglichkeit zu zeigen, auf nummerierte Namen zu verzichten und mehrere mögliche Eingaben des Nutzers zu validieren.

mutetella
Es ist ja schön und gut das du mir ein beispiel gibst , aber ich bin ein Anfänger und mehr als die hälfte deines Codes verstehe ich nicht , ich möchte einfach nur die if funktion mit einem Satz , einer zahl oder einen Buchstaben lernen den man dann z.B für kleine Fragen benutzen kann ^^

in vielen Videos sehe ich dann etwa so einen code :

Code: Alles auswählen

Frage1 = raw_input('Die Frage')
print 'A: Antwort 1'
print 'B: Antwort 2'
print 'C: Antwort 3'

if Frage 1 ==  A:
   print 'Genau'
else:
           print 'Falsch'
Aber warum sind die eigentlich richtigen Antworten denn immer Falsch?
Bzw was schreibe ich daran falsch?
BlackJack

@Littlejofel: Da ist ein Syntaxfehler drin, weil da ein Leerzeichen zwischen ``Frage`` und ``1`` steht.

Die Unterschiedliche Einrückung bei den beiden Zweigen ist zwar nicht syntaktisch falsch, aber so etwas sollte man nicht machen. Konvention bei Python ist vier Leerzeichen pro Ebene einzurücken.

Ansonsten hast Du immer noch keinen Quelltext gezeigt bei dem ein Problem mit dem ``if`` besteht. Das Bildschirmfoto zählt nicht, weil der dort gezeigte Quelltext laut Foto nicht gespeichert wurde, man also nicht sicher sein kann welcher Code *tatsächlich* ausgeführt wurde.

Solange wir Deine Probleme nicht nachvollziehen können, ist es schwer bis unmöglich Dir zu sagen was Du falsch machst und wie man es richtig machen würde.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Littlejofel hat geschrieben:... aber ich bin ein Anfänger und mehr als die hälfte deines Codes verstehe ich nicht , ...
Vieles lernt man gerade dadurch, dass man versucht, fremden Code zu verstehen. Nicht umsonst findet man in Dokumentationen neben der eigentlichen Erläuterung meistens auch ein/zwei Beispiele. Und für die dann noch bestehenden Unklarheiten gibt es Foren wie dieses... :wink:
Littlejofel hat geschrieben:... oft ist es so das bei meinen if statements ...
... Wie sollte so ein if statement denn eigentlich richtig sein ...
... irgendwie funktionieren meine if statements nie ...
So geht es mir zum Beispiel mir regulären Ausdrücken... :wink: Die liefern oft nicht das, was ich mir vorstelle. Aber die Lösung auf meine grundsätzlichen Probleme mit regulären Ausdrücken gibt es halt nicht. Wenn ich ein konkretes Problem nicht hinbekomme, dann muss ich konkret fragen. [wunschdenken]Und irgendwann habe ich genügend konkrete Antworten bekommen, um keine Probleme mehr mit regulären Ausdrücken zu haben![/wunschdenken]

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Littlejofel
User
Beiträge: 17
Registriert: Mittwoch 23. April 2014, 16:39

mutetella hat geschrieben:
Littlejofel hat geschrieben:... aber ich bin ein Anfänger und mehr als die hälfte deines Codes verstehe ich nicht , ...
Vieles lernt man gerade dadurch, dass man versucht, fremden Code zu verstehen. Nicht umsonst findet man in Dokumentationen neben der eigentlichen Erläuterung meistens auch ein/zwei Beispiele. Und für die dann noch bestehenden Unklarheiten gibt es Foren wie dieses... :wink:
Littlejofel hat geschrieben:... oft ist es so das bei meinen if statements ...
... Wie sollte so ein if statement denn eigentlich richtig sein ...
... irgendwie funktionieren meine if statements nie ...
So geht es mir zum Beispiel mir regulären Ausdrücken... :wink: Die liefern oft nicht das, was ich mir vorstelle. Aber die Lösung auf meine grundsätzlichen Probleme mit regulären Ausdrücken gibt es halt nicht. Wenn ich ein konkretes Problem nicht hinbekomme, dann muss ich konkret fragen. [wunschdenken]Und irgendwann habe ich genügend konkrete Antworten bekommen, um keine Probleme mehr mit regulären Ausdrücken zu haben![/wunschdenken]

mutetella
aber höhr doch mal , dein Script ist so kompliziert und ich kann nichts daraus lesen :| Alles was ich mit if mache funktioniert Nicht!!!
z.B der Code hier der kommt noch nichtmal dazu das eigentliche Quiz zu starten:

Code: Alles auswählen

#Das ist jetzt noch ein Beispiel das fast ganz genau wie aus einem Video übernommen wurde nur mit anderen Fragen und Variablen!
print 'Willkommen zu meinem Quiz'
beginn = raw_input('Bist du bereit? Schreibe Ja oder nein')
if beginn == 'Ja':
    print 'A: Nutelle auf nem Tost'
    print 'B: Programme'
    print 'C: Monitor tastatur etc.'
    q1 = raw_input('Was versteht man unter Software?')
    if q1 == 'B' or q1 == 'b':
        print 'Ganz genau'
else:
    print 'Leider nicht'
if beginn == 'Nein':
    quit()

das ist echt frustrierend und keine der sachen die geschrieben wurden haben geholfen und ich hab echt keinen Plan wie das Script seien muss damit es richtig läuft und die Antworten die richtig seien sollen auch als richtig erkannt werden. Bei dem test in der Shell kommt auf die richtige antwort immer der Satz der für die Falsche Antwort gedacht ist aber wenn ich das if und else umschreibe kommt er nur dazu Richtig zu schreiben , ist ja klar. :(
mcdwerner
User
Beiträge: 113
Registriert: Donnerstag 7. Juli 2011, 14:27

@Littlejofel:
ich würde gern nochmal meinen Tipp von oben wiederholen. Um zu verstehen was da im Moment gerade passiert hilft es sehr, sich genau das (was gerade passiert) anzeigen zu lassen. u.a. dafür gibt es das print Statement.
Nochmal ausführlich:

Code: Alles auswählen

#Das ist jetzt noch ein Beispiel das fast ganz genau wie aus einem Video übernommen wurde nur mit anderen Fragen und Variablen!
print 'Willkommen zu meinem Quiz'
beginn = raw_input('Bist du bereit? Schreibe Ja oder nein')
print "Diesen Wert hat die Variable 'beginn' gerade:", beginn
print "So wird das if Statement ausgewertet:", beginn == 'Ja'
if beginn == 'Ja':
    print 'A: Nutelle auf nem Tost'
    print 'B: Programme'
    print 'C: Monitor tastatur etc.'
    q1 = raw_input('Was versteht man unter Software?')
    print "Diesen Wert hat die Variable 'q1' gerade:", q1
    print "So wird das if Statement ausgewertet:", q1 == 'B' or q1 == 'b'
    if q1 == 'B' or q1 == 'b':
        print 'Ganz genau'
else:
    print 'Leider nicht'
if beginn == 'Nein':
    quit()
 
 
Littlejofel
User
Beiträge: 17
Registriert: Mittwoch 23. April 2014, 16:39

mcdwerner hat geschrieben:@Littlejofel:
ich würde gern nochmal meinen Tipp von oben wiederholen. Um zu verstehen was da im Moment gerade passiert hilft es sehr, sich genau das (was gerade passiert) anzeigen zu lassen. u.a. dafür gibt es das print Statement.
Nochmal ausführlich:

Code: Alles auswählen

#Das ist jetzt noch ein Beispiel das fast ganz genau wie aus einem Video übernommen wurde nur mit anderen Fragen und Variablen!
print 'Willkommen zu meinem Quiz'
beginn = raw_input('Bist du bereit? Schreibe Ja oder nein')
print "Diesen Wert hat die Variable 'beginn' gerade:", beginn
print "So wird das if Statement ausgewertet:", beginn == 'Ja'
if beginn == 'Ja':
    print 'A: Nutelle auf nem Tost'
    print 'B: Programme'
    print 'C: Monitor tastatur etc.'
    q1 = raw_input('Was versteht man unter Software?')
    print "Diesen Wert hat die Variable 'q1' gerade:", q1
    print "So wird das if Statement ausgewertet:", q1 == 'B' or q1 == 'b'
    if q1 == 'B' or q1 == 'b':
        print 'Ganz genau'
else:
    print 'Leider nicht'
if beginn == 'Nein':
    quit()
 
 
Das kommt dann bei der shell heraus(Habe Ja und 'Ja' ausprobiert nachdem ich enter drücke kommt das mit False und danach kann ich nichts mehr eingeben :( )
Bild
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Bitte unterlasse die Full-Quotes doch - zietiere nur das, was Du auch wirklich kommnetierst; das macht den Thread leserlicher :-)

Schau Dir doch mal *genau* an, was Du eingibst und *was* Du erwartest! ;-)

Du brauchst im übrigen keine Screenshots posten - poste einfach die Shell-Ausgabe. Das kannst Du einfach mit den Python-Code-Tags machen!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Littlejofel
User
Beiträge: 17
Registriert: Mittwoch 23. April 2014, 16:39

Hyperion hat geschrieben:Bitte unterlasse die Full-Quotes doch - zietiere nur das, was Du auch wirklich kommnetierst; das macht den Thread leserlicher :-)

Schau Dir doch mal *genau* an, was Du eingibst und *was* Du erwartest! ;-)

Du brauchst im übrigen keine Screenshots posten - poste einfach die Shell-Ausgabe. Das kannst Du einfach mit den Python-Code-Tags machen!
ich hab den Code schon gefühlte 10 minuten angeschaut und bin ihn durchgegangen , aber ich finde den fehler nicht :( Kann mir denn keiner den Fehler sagen?
Zuletzt geändert von Littlejofel am Freitag 25. April 2014, 16:45, insgesamt 1-mal geändert.
Antworten