Python: Secret Zahl per Slicing bestimmen

firedragon7

firedragon7

Mühlviertler Linuxer
Ich habe sozusagen ein kleines Konsolen Game zum lernen. Da ich gerade bei dem Buch Python weitergelesen habe, Oberkapitel Basisdatentypen, ist mir die Idee gekommen, das man die Zahl secret, die was man erraten muss, per Slicing festzulegen und dann raten zu lassen. Hier der Code:

#! usr/bin/python

secret = 0
guess = 0
i = 0
Ze= 0
Za= 0
Zb= 0

Ze = 01234567899876543210
print "Geben Sie dre Zahlen zwischen 0 und 30 ein."
print "Geben Sie die erste Zahl ein: "
Za = input
print "Geben Sie die zweite Zahl ein: "
Zb = input
Ze[Za:Zb]
secret = Ze
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!"

Es komm folgende Fehlermeldung heraus:
File "spiel1v2.py", line 11
Ze = 01234567899876543210
^
SyntaxError: invalid token

secret ist die Zahl die man erraten muss.
guess ist die Zahl die man nachdem secret festgelegt ist, eingeben muss .
i gibt die Zahl der Versuche an.
Ze soll die Zahl sein die "geslicd" wird.
Za soll die erste Zahl für das Slicing sein.
Zb soll die zweite Zahl für das Slicing sein.

Liegt es an long? Wie kann ich die Ze als int-Zahl festlegen?
Ich benutze noch Python 2.5.2.
Vielen Dank im Vorraus.
 
Hi,
Code:
File "spiel1v2.py", line 11
Ze = 01234567899876543210
^
SyntaxError: invalid token
Ich habe mir dein Programm jetzt nicht naeher angesehen, aber das Problem kommt daher, dass du versuchst die Zahl oktal anzugeben. Wahrscheinlich ist dir das noch nicht einmal aufgefallen, aber wenn du eine Null voran stellst, handelt es sich um eine Oktalzahl (Basis 8 ). Die scheint Python nicht automatisch ins long Format konvertieren zu koennen.

Lass die Null am Anfang weg, und der Syntax Fehler sollte sich in Luft aufloesen. ;)

Edit:

Wenn du hier im Board Code einfuegst, solltest du die Code-Tags benutzen, und nicht zitieren. Ansonsten verlierst du, wie hier geschehen, die Einrueckungen.

Bei genauerem Hinschauen kann ich dir auch direkt sagen wo sich Python als naechstes beschweren wird:
Code:
Ze[Za:Zb]
Du definierst Ze als integer, versuchst es aber als String zu behandeln. Ich denke was du tatsaechlich willst ist folgendes:
Code:
Ze = "01234567899876543210"
[...]
secret = int(Ze[Za:Zb])

Nenbei wuerde ich mir bessere Namen fuer die Variablen aussuchen, und vor allem einheitlich bleiben. Als Anregung koenntest du dir mal den Python Style Guide anschauen: http://www.python.org/dev/peps/pep-0008/

Edit2:

Das sind mir doch noch zuviele Fehler, als dass ich dich auf alle einzeln hinweisen wuerde. Im Allgemeinen solltest du dir bewusst machen, dass Python im Gegensatz zu z.B. Perl strongly typed ist, d.h. du kannst einen String nicht wie eine Zahl verwenden, und umgekehrt. Da hast du im Skript einige Probleme mit.

Edit3:
Mmh, scheint nicht mein Tag zu sein, ich sehe gerade dass input() anders funktioniert als raw_input(), so dass dein Programm groesstenteils doch ok ist. ;)
Du musst nur darauf achten, dass input auch ausgefuehrt wird. 'Za = input' ist ein korrektes statement, macht aber nicht das was du vermutest, es muss natuerlich 'Za = input()' heissen.

mfg,
bytepool
 
Zuletzt bearbeitet:
So wie man sieht habe ich einiges an Code getan:

PHP:
#! usr/bin/python

secret = 0
guess = 0
i = 0
Ze = 0
Za = 0
Zb = 0
Zc = 0 

Ze = int
Ze = 123456789098765432100123456789
print "Geben Sie dre Zahlen zwischen 0 und 30 ein."
Za = input ("Geben Sie die erste Zahl ein: ")
Zb = input ("Geben Sie die zweite Zahl ein: ")
Zc = input ("Geben Sie die dritte Zahl ein: ")
secret = int(Ze[Za:Zb:Zc])
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!"

Das Programm fragt auch schon, wie man nachfolgend sieht, die Zahlen ab:

PHP:
johannes@localhost PBsp]$ python spiel1v2.py
Geben Sie dre Zahlen zwischen 0 und 30 ein.
Geben Sie die erste Zahl ein: 22
Geben Sie die zweite Zahl ein: 4
Geben Sie die dritte Zahl ein: 9

Nur dann kommt folgende Fehlermeldung:

PHP:
Traceback (most recent call last):
  File "spiel1v2.py", line 17, in <module>
    secret = int(Ze[Za:Zb:Zc])
TypeError: 'long' object is unsubscriptable

Weiß jemand hierfür eine Lösung??(
 
Hi,
Nur dann kommt folgende Fehlermeldung:

PHP:
Traceback (most recent call last):
  File "spiel1v2.py", line 17, in <module>
    secret = int(Ze[Za:Zb:Zc])
TypeError: 'long' object is unsubscriptable

Weiß jemand hierfür eine Lösung??(

hast du dir eigentlich mal die Muehe gemacht, zu lesen was ich schrieb?

Bei genauerem Hinschauen kann ich dir auch direkt sagen wo sich Python als naechstes beschweren wird:
Code:
Ze[Za:Zb]
Du definierst Ze als integer, versuchst es aber als String zu behandeln.

mfg,
bytepool
 

Ähnliche Themen

Squid nur zum maskieren der eigenen IP, nicht für Webserver auf port 80

CGI laesst sich nicht ausfuehren

Server-Monitoring mit RRDTool

Zurück
Oben