Wenn es eine while nicht funzt...

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
KingLouie
User
Beiträge: 2
Registriert: Montag 16. Februar 2015, 18:06
Wohnort: Kriftel

Hallo Leute,

bin ein verzweifelter Neuling der mit seinem Latinuum am Ende ist.
Vielleicht ist die Syntax falsch oder ich habe einen Gedankenfehler den ich vor lauter Bäumen nicht sehe.

Hier mein Code:

Code: Alles auswählen

print ('Such die Zahl')
n=1

while n != 0:
    n=input('Zahleingabe:')
    if n==25:
        print('Richtig')
    else:
        print ('Falsch')
    
print(n,'Schluss ist!')
Ziel ist es so Lange nach der richtigen Zahl zu Fragen bis diese als Richtig benannt wird.
Die null soll dann das Ausgangskriterium sein.

Und das passiert die ganze Zeit:

Code: Alles auswählen

Python 3.4.2 (v3.4.2:ab2c023a9432, Oct  6 2014, 22:15:05) [MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
Such die Zahl
Zahleingabe:25
Falsch
Zahleingabe:0
Falsch
Zahleingabe:15
Falsch
Zahleingabe:
es wird nur die Eingabe abgefragt und die else-Bedingung ausgeführt. Trotz Richtiger Zahl
kriege ich immer flasch um die Ohren gehauen. Selbst den Ausgang mit null finde ich nicht.

BITTE..., hilft mir.

Dank und Gruß von der Palme
Zuletzt geändert von Hyperion am Dienstag 17. Februar 2015, 09:15, insgesamt 1-mal geändert.
Grund: Code in Python Code Tags gesetzt.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo und willkommen im Forum!

Das Problem liegt darin, dass du einen String mit einem Integer vergleichst, diese sind niemals identisch. In etwa so:

Code: Alles auswählen

"25" == 25
Das wird immer zu False ausgewertet. Du musst daher die Eingabe noch mittels int in einen Integer umwandeln:

Code: Alles auswählen

int(input(...))
Und bitte setze deinen Code das nächste Mal hier in Code-Tags, ein Button dazu befindet sich über dem Eingabefeld. Dann ist dein Code auch korrekt lesbar.
Das Leben ist wie ein Tennisball.
KingLouie
User
Beiträge: 2
Registriert: Montag 16. Februar 2015, 18:06
Wohnort: Kriftel

Danke für die prompte Hilfe.

Das bedeutet, dass wenn man nichts definiert handelt es sich grundsätzlich immer um einen String?
jetzt ein bisschen Fremdwerbung: Auf Python-Kurs.eu habe ich es so verstanden, dass eine variable in der ich eine Dezimalzahl ablege automatisch als integer definiert wird. Habe ich das falsch verstanden?
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

KingLouie hat geschrieben:Das bedeutet, dass wenn man nichts definiert handelt es sich grundsätzlich immer um einen String?
Alles was du via input (Python 3) bzw. raw_input (Python 2) zurückgegeben bekommst ist ein String.

Sonst hängt es davon ab, wie du Dinge im Code definierst.

Code: Alles auswählen

value = '23'  # string
value = 23  # integer
value = 23.0  # float
Und noch ein Beispiel bezüglich des Vergleichs von Werten in Python 3.

Code: Alles auswählen

>>> "25" == 25
False
>>> "25" > 25
Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: unorderable types: str() > int()
Python kann durchaus noch feststellen, dass "25" nicht gleich 25 ist. Wenn du jetzt aber wissen möchtest ob "25" größer als 25 ist, dann bekommst du einen TypeError, denn eine sinnvolle Sortierung ist mit Strings und Integer-Werten nicht möglich.


Bei dem von dir genannten python-kurs.eu solltest du übrigens aufpassen wenn es um Klassen geht. Da werden mal lustig "protected" und "private" Attribute erklärt und mit einem oder zwei führenden Unterstrichen versehen. Diese Erklärung ist falsch. An dieser Stelle hat der Auto seine Kenntnis von anderen Sprachen fehlerhaft auf Python übertragen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

KingLouie hat geschrieben:Auf Python-Kurs.eu habe ich es so verstanden, dass eine variable in der ich eine Dezimalzahl ablege automatisch als integer definiert wird. Habe ich das falsch verstanden?
Ja!

Es gibt übrigens viele gute bis sehr gute Tutorials: Für dich könnte "Learn python the hard way" interessant sein - nicht vom Namen abschrecken lassen!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
darktrym
User
Beiträge: 785
Registriert: Freitag 24. April 2009, 09:26

Der/Die Autor/-en haben generell ein Problem mit der Sprache oder wenigstens mit der Programmierung im Allgemeinen:

Sinnlose Stringaddition, Print kennt mehr als ein Parameter.
def SageHallo(self):
print("Hallo, mein Name ist " + self.name)
Der Kommentar klingt nach einer Empfehlung, mal von linearer Laufzeit und dem Verschleiern der Absicht abgesehen.
if hasattr(f, "counter"): # Alternativ: if "counter" in dir(f):
Das Beispiel schreit nach Stringformatierung.
return "Roboter(\"" + self.name + "\"," + str(self.baujahr) + ")"
PEP8 wird auch recht konsequent ignoriert.
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
Antworten