Programm zum laufen bringen

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
lukasletitburn
User
Beiträge: 9
Registriert: Montag 27. August 2012, 21:07

Hallo Forum,

ich habe diesen Code

Code: Alles auswählen

>>> secret = 1337
>>> guess = 4
>>> i = 0
>>> guess != secret:
	

>>> while guess != secret:
	guess = input("Raten Sie: ")

    guess = input("Raten Sie: ")

	if guess < secret:
		print ("Zu Klein")

	if guess > secret:
		print ("ZuGross")
		
        i = i + 1

    print ("Super, Sie haben es in ", i, "Versuchen geschafft!")
diesen habe ich unter spiel.py abgespeichert. Ich möchte das Programm laufen lassen. Ich habe es im IDLE verfasst wie kann ich es nun ausführen? reicht es zu drücken bzw. Run Module?

Er sagt immer invalid Syntax dabei ist der Code 1:1 abgekupfert von der Übung in dem Tutorial :evil:
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

Hallo

Die Einrückung stimmt nicht.

Mit richtiger Einrückung geht es:

Code: Alles auswählen

secret = 1337
guess = 4
i = 0


   

while guess != secret:
    guess = input("Raten Sie: ")


    if guess < secret:
       print ("Zu Klein")

    if guess > secret:
       print ("ZuGross")
       break
  
    i = i + 1 

print ("Super, Sie haben es in ", i, "Versuchen geschafft!")
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Ich würd das ganze ein wenig umstellen:

Code: Alles auswählen

import itertools

secret = 42

for index in itertools.count(1):
    guess = int(raw_input("Raten Sie: "))

    if guess == secret:
        print "Es wurden", i, "Versuche benötigt"
        break
    elif guess > secret:
        print "zu gross"
    else:
        print "zu klein"
So sparst du dir das unnötige händische Hochzählen des Index und die überflüssige Initialisierung von guess. So wie es aussieht, verwendest du noch Python 2.x, da solltest du das ``input`` durch ``int(raw_input(...))`` ersetzen. input führt nämlich den eingegebenen Code aus, was im besten Fall zu unangenehmen Fehlern führt, im schlimmsten Fall hast du dir halt eine prima Lücke in dein Programm eingebaut. Auch die Kalmmern beim print sind bei 2.x falsch.

Das ganze solltest du am besten noch in eine Funktion packen und natürlich Falschabgaben abfangen.
Das Leben ist wie ein Tennisball.
lukasletitburn
User
Beiträge: 9
Registriert: Montag 27. August 2012, 21:07

Mit was editiert Ihr den euren Quelltext direkt mit IDLE oder nutzt ihr dazu Notepad ++ oder Eclipse ? oder mit welchem Editor erstelle ich komfortabel Quelltexte für Python?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

lukasletitburn hat geschrieben:Mit was editiert Ihr den euren Quelltext direkt mit IDLE oder nutzt ihr dazu Notepad ++ oder Eclipse ? oder mit welchem Editor erstelle ich komfortabel Quelltexte für Python?
Frag einfach mal die Forumssuche an, dann wirst du einen ewig langen Thread zu den verschiedensten Editoren finden. Jeder verfügbare Editor wurde sicher mindestens einmal genannt und du wirst so oder so nicht drum herum kommen es selber zu probieren. Welches Tool man verwendet hängt stark von den eigenen Vorlieben und dem eigenen Können ab.
Das Leben ist wie ein Tennisball.
lukasletitburn
User
Beiträge: 9
Registriert: Montag 27. August 2012, 21:07

Habe den Code nun so editiert

Code: Alles auswählen

secret = 1337
guess = 0
i = 0


   

while guess != secret:

    guess = input("Raten Sie: ")


    if guess < secret:
       print ("Zu Klein")

    if guess > secret:
       print ("Zu gross")
  
    i = i + 1 

print ("Super, Sie haben es in ", i, "Versuchen geschafft!")
Jedoch wirft er mir nun diesen Fehler aus.

Code: Alles auswählen

Python 3.2.3 (default, Apr 11 2012, 07:12:16) [MSC v.1500 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
Raten Sie: 4
Traceback (most recent call last):
  File "C:\Users\Lukas\Documents\spiel.py", line 13, in <module>
    if guess < secret:
TypeError: unorderable types: str() < int()
>>> 
Das Programm startet ja .. ich kann einfach nicht nachvollziehen wieso er an dieser Stelle abbricht?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Du startest dein Programm mit Python 3.2, dort liefert input einen String zurück. Und vielleicht solltest du noch einmal einen Blick auf meine Hinweise werfen und diese bei dir umsetzen.
Das Leben ist wie ein Tennisball.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Du hast einmal einen String und einmal einen Integerwert. Das kann Python nicht vergleichen - Du musst Deine Eingabe schon mittels `int()` in ein Integer wandeln, dann klappt das auch.

Typen anzeigen lassen kannst Du Dir übrigens durch `type()`. Bau das doch mal in ein und lasse Dir die Infos für `secret` und `guess` ausgeben.

Deine "Initialisierung" von `guess` ist übrigens sinnlos - Python ist eine *dynamisch* typisierte Sprache! "Namen" haben keinen Typen, sondern nur die Objekte, an die sie gebunden sind. Zu Anfang bindest Du `guess` an ein Integer-Objekt mit dem Wert 0, im weiteren Verlauf dann über den Rückgabewert von `input` an ein String-Objekt. Der Name bleibt gleich, das Objekt dahinter und damit der *Typ* eben nicht! Daher auch der Fehler :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
lukasletitburn
User
Beiträge: 9
Registriert: Montag 27. August 2012, 21:07

Jetzt läuft es.

Code: Alles auswählen

secret = 1337
guess = 4
i = 0


   

while guess != secret:

    guess = input("Raten Sie: ")


    if guess < str(secret):
       print ("Zu Klein")

    if guess > str(secret):
       print ("Zu gross")
  
    i = i + 1 

print ("Super, Sie haben es in ", i, "Versuchen geschafft!")
Zwar nicht korrekt aber ich habe es lauffähig bekommen zum ersten Mal :lol:

was mich wundert das hier aus diesem schönen Buch und dort behauptet doch der Autor ganz frech das dieser Code so funktioniere. http://bit.ly/RqtQKi Das dies bei mir nicht geht liegt das nur an der Version 3.x oder weil ich ein Brett vorm Kopf habe ..?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Du bist auch ein wenig beratungsresistent, wie? ;-)

Wieso zum Teufel willst Du den umgekehrten Weg gehen und eine *Zahl* in eine Zeichenkette (aka String) wandeln? Dabei wird dann ein lexikografischer Vergleich angewendet:

Code: Alles auswählen

"Angelina" < "Jenna"
>>> True
Was dann aber bei Zahlen zum Vergleich von "Ziffern" wird und man daher folgendes Ergebnis bekommen kann:

Code: Alles auswählen

"3" < "4"
>>> True

"13" < "4"
>>> True
Das ist ja eher nicht im Sinn der Aufgabe!

Wie man das löst, schrieb ich Dir ja schon... und EyDu hatte es sogar schon im Code stehen.

@Buch: Was auch immer das für ein Buch ist - vergiss es am besten! Wenn da schon bei solchen simplen Sachen so viel Mist geschrieben wird ("Hier werden die Variablen angelegt und mit Werten versehen" *schauder*), dann wird es wohl nicht besser werden. Benutze lieber "Learn Python the hard way", das offizielle Tutorial (gibt's auch auf Deutsch), "A Byte of Python" und wie sie nicht alle heißen.

Finger weg auch vom OpenBook vom Galileo Verlag. Und dann gibt es noch so ein Schaudermachwerk auf irgend einer .eu-Domain iirc.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten