Seite 1 von 1
Wenn es eine while nicht funzt...
Verfasst: Montag 16. Februar 2015, 22:05
von KingLouie
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
Re: Wenn es eine while nicht funzt...
Verfasst: Montag 16. Februar 2015, 22:14
von EyDu
Hallo und willkommen im Forum!
Das Problem liegt darin, dass du einen String mit einem Integer vergleichst, diese sind niemals identisch. In etwa so:
Das wird immer zu False ausgewertet. Du musst daher die Eingabe noch mittels int in einen Integer umwandeln:
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.
Re: Wenn es eine while nicht funzt...
Verfasst: Dienstag 17. Februar 2015, 05:48
von KingLouie
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?
Re: Wenn es eine while nicht funzt...
Verfasst: Dienstag 17. Februar 2015, 07:58
von /me
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.
Re: Wenn es eine while nicht funzt...
Verfasst: Dienstag 17. Februar 2015, 09:17
von Hyperion
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!
Re: Wenn es eine while nicht funzt...
Verfasst: Dienstag 17. Februar 2015, 10:39
von darktrym
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.