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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Dir ist schon klar, dass das wieder ein sinnloser Full-Quote war?
Littlejofel hat geschrieben: ich hab den Code schon gefühlte 10 minuten angeschaut und bin ihn durchgegangen , aber ich finde den fehler nicht :(
Ok, ich geb Dir einen Tipp:

Code: Alles auswählen

antwort = "Ja"
eingabe = "'Ja'"

antwort == eingabe
> False

print(antwort, eingabe)
> Ja 'Ja'
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

zu deiner Frage: Das war doch nur ein Quote , du musst doch wissen auf welche frage ich antworte (Ich mach jetzt einfach keine Quotes mehr sondern nur noch @Name...)

und ich weiß was du mit deinem tipp sagen willst aber es hilft mir nicht viel weiter.Ich habe ja geschrieben das ich 'Ja' und Ja probiert habe , ebend auch noch mehr.Aber egal was ich eingebe es kommt immer die Falsche antwort.Ich möchte keine Tipps mehr ich möchte nur wissen wie man ein fernünftiges if statement macht :( langsam kriege ich das gefühl das programmieren nichts für mich ist , aber ich will es unbedingt lernen und es ist echt ein (Das könnt ihr euch denken) gefühl so ein simples if statement nicht hinzubekommen...

ich gucke schon seid 2 Tage nach Videos für mein Problem kann aber nichts finden das mir hilft
BlackJack

@Littlejofel: Du kannst nicht alles probiert haben, denn dann hättest Du die richtige Kombination gefunden. Wobei es davon eigentlich nur vier Stück gibt, also auch nicht wirklich viele. Im Quelltext kannst Du ``Eingabe == 'Ja'`` und ``Eingabe == Ja`` schreiben, und eingeben jeweils Ja und 'Ja'. Das sind vier Kombinationen. Bei zweien gibt es eine Ausnahme weil der Name `Ja` nicht definiert ist, bei einer ”funktioniert es nicht” und eine ist richtig.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Littlejofel hat geschrieben:zu deiner Frage: Das war doch nur ein Quote , du musst doch wissen auf welche frage ich antworte (Ich mach jetzt einfach keine Quotes mehr sondern nur noch @Name...)
Ja nur ein Quote, aber den hättest Du bearbeiten müssen! Du hast Dich in Deiner Antwort lediglich auf den mittleren Absatz bezogen - also reicht es auch aus, nur genau diesen zu zitieren. Und ja, das macht mitunter ein wenig Arbeit ;-)

Wie Du bei mir in diesem Posting sehen kannst, zitiere ich auch nur den für meine Antwort relevanten Teil 8)
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

@Blackjack

wie meinst du das an welcher stelle soll ich was eingeben? :shock:
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Es ist ein Unterschied ob du Ja oder "Ja" eingibst.
Das Leben ist wie ein Tennisball.
BlackJack

@Littlejofel: Am besten gibst Du sowohl im Editor als auch wenn das Programm nach Eingaben fragt, das richtige ein. ;-)

Ich weiss nicht ob Du so weiterkommst. Du schreibst Du hast alles mögliche ausprobiert, aber wir wissen nicht was das alles ist und vor allem auch nicht was Du Dir dabei gedacht hast. Das wäre aber wichtig um zu verstehen wo Du falsche Annahmen triffst, also wo Deine Probleme konkret liegen.

Beim Programmlauf hast Du 'Ja' eingegeben. Wie viele Zeichen sind das? Und womit vergleichst Du das im Programm? Wie viele Zeichen hat *das*? Beantworte diese beiden Fragen für Dich und überprüfe sie dann mit ``print`` und der `len()`-Funktion. Vielleicht kommst Du dann ja drauf.
Littlejofel
User
Beiträge: 17
Registriert: Mittwoch 23. April 2014, 16:39

@Blackjack

Das ist zum Beispiel mein Code :

Code: Alles auswählen

print '1: Tastatur und Maus'
print '2: USB Stick'
print '3: Drucker'
f1 = raw_input('Welche der oben aufgelistteten Dinge sind Ausgabegeräte?')
Eingabe = '3'
if f1 == Eingabe:
    print 'Genau'
else:
    print 'Leider Falsch'
Wenn ich '3' oder einfach nur 3 eingebe kommt: Leider Falsch , also was muss ich ändern bzw eingeben?
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Verwende dazu am besten den Vergleichsoperator und keine Zuweisung, also

Code: Alles auswählen

Eingabe == '3'
EDIT: Anmerkung: In deinem Code stand

Code: Alles auswählen

Eingabe = '3'
Grüße,
anogayales
Zuletzt geändert von anogayales am Freitag 25. April 2014, 17:44, insgesamt 2-mal geändert.
Littlejofel
User
Beiträge: 17
Registriert: Mittwoch 23. April 2014, 16:39

Ich bin ein Anfänger und kann damit leider nicht viel anfangen , da ich nicht weiß wo ich was hinschreiben soll.
anogayales
User
Beiträge: 456
Registriert: Mittwoch 15. April 2009, 14:11

Schau doch mal in deine Zeile 5 und in meine Zeile 1 und schau ob du da einen Unterschied erkennst. Kleiner Tipp: Ersetze meine Zeile mit deiner Zeile.

EDIT: Okay, da stand definitiv was Anderes als ich gepostet habe. Finde ich schon ein wenig dreist.
Littlejofel
User
Beiträge: 17
Registriert: Mittwoch 23. April 2014, 16:39

EDIT: Anmerkung: In deinem Code stand

Code: Alles auswählen

Eingabe = '3'
Grüße,
anogayales[/quote]

ja für die Variable
Littlejofel
User
Beiträge: 17
Registriert: Mittwoch 23. April 2014, 16:39

meinst du das so?

Code: Alles auswählen

print '1: Tastatur und Maus'
print '2: USB Stick'
print '3: Drucker'
Eingabe == '3'
f1 = raw_input('Welche der unten aufgelistteten Dinge sind Ausgabegeräte?')
if f1 == "3":
    print 'Genau'
else:
    print 'Leider Falsch'
wenn ich Eingabe == zum code hinzufüge steht in der shell ich soll Eingabe definieren. Was meinst du? :| was soll wo hin? :(

Edit:Hab den anderen code von der Seite hiervor angeguckt in deiner zeile: == in meiner: = aber was ändert das?
Littlejofel
User
Beiträge: 17
Registriert: Mittwoch 23. April 2014, 16:39

Das hier geht (Aber nur mit Zahlen)

Code: Alles auswählen

print 'Schreibe 1  2  oder  3'
print 'Was ist ne Software?'
print '1  ein Programm'
print '2  Nutella auf tost'
print '3  Tastatur Maus ...'

a = int(input())

if a == 1:
    print 'Du hast recht'
else:
    print 'Falsch'
wie kann ich denn 1 2 und 3 durch A) B) oder C) auswechseln.Dann bräuchte ich ja einen anderen input befehl z.B raw_input aber damit hat es ja noch nicht funktioniert...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Littlejofel hat geschrieben: Edit:Hab den anderen code von der Seite hiervor angeguckt in deiner zeile: == in meiner: = aber was ändert das?
Ersters ist ein Vergleich, zweiteres eine Zuweisung! Das ist ein erheblicher Unterschied.

Wieso trennst Du nicht einfach mal von dem Programm und gibst in einer Shell einfach einzelne Anweisungen Schritt für Schritt an?

Gib doch einfach mal in einer Python-Shell (nimm am besten *nicht* Idle, sondern starte einfach nur die ganz normale Standard-Python-Shell!) folgendes ein:

Code: Alles auswählen

gesucht = "Ja"
eingegeben = "Ja"
gesucht == eingegeben
Und dann sag uns, was die Shell als Antwort hinschreibt!
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

Die Shell schreibt True nachdem ich alles eingegeben habe

und wenn ich z.B statt

Code: Alles auswählen

eingeben = '9'

Code: Alles auswählen

eingeben == '9'
mache

steht in der shell ich soll 'eingeben' definieren.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Also arbeitet Dein Python-Shell wie erwartet richtg ;-)

Nun probiere doch mal, was passiert, wenn Du für ``eingeben`` das "Ja" in Hockommata setzt, also so:

Code: Alles auswählen

eingeben = "'ja'"
(Beachte die kleinen ' um das "Ja"!)

Was denkst Du, sollte dabei rauskommen?
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:Was denkst Du, sollte dabei rauskommen?
nun ich würde mal sagen ich muss 'ja' eingeben , doch das klappt nicht. Hier ist der Code nur etwas abgespeckt:

Code: Alles auswählen

beginn = raw_input('willst du anfangen?')
eingeben = "'ja'"

if beginn == eingeben:
    print 'Funktioniert'
else:
    print 'Funktioniert nicht'
so sah das dann in der shell aus : willst du anfangen? 'ja'
Funktioniert nicht
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Bei mir funktioniert dein Code:

Code: Alles auswählen

>>> beginn = raw_input('willst du anfangen?')
willst du anfangen?'ja'
>>> eingeben = "'ja'"
>>> if beginn == eingeben:
...     print 'Funktioniert'
... else:
...     print 'Funktioniert nicht'
...
Funktioniert
Aber vergleich mal:

Code: Alles auswählen

willst du anfangen? 'ja'  # <-- deins
willst du anfangen?'ja'  # <-- meins
" 'ja'" ist offensichtlich nicht das gleiche wie "'ja'".
In specifications, Murphy's Law supersedes Ohm's.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Die simple Anwtort wäre ``False`` gewesen! ;-)

Code: Alles auswählen

gesucht == eingegeben
Dies *vergleicht* ja eben den von den beiden Objekten die den Operator (``==``) umschließen. Zwei Strings sind eben nur gleich, wenn jeder einzelne Buchstabe an jeder einzelnen Stelle exakt dem an der selben Stelle im anderen String entspricht!

Ja ist also ungleich 'Ja'!

Und genau das solltest Du lernen, denn das ist Dir bei Deinem Ursprungsproblem auf die Füße gefallen! :mrgreen:

Irgend wie habe ich allerdings das Gefühl, dass Du das immer noch nicht wirklich verstanden hast :(
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten