Zahlenraten

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.
morice18
User
Beiträge: 4
Registriert: Dienstag 1. November 2011, 21:18

Hallo Leute..
Ich bin neu hier im Forum und hoff mal ihr könnt mir helfen..
Also.. Mit meinem Zahlenratenprogramm bin ich soweit :



import random
secret = random.randint(1,100)
guess = 0
i = 0
p = 8

while guess != secret:
guess = input("Raten Sie. Sie haben noch", p, "Versuche: ")
if guess < secret:
print "Zu klein"
if guess > secret:
print "Zu gross"
i = i + 1
p = p - 1
if i > 8 :
print "Schade. Sie haben es nicht geschafft."

print "Super, Sie haben es in", i, "Versuchen geschafft!"


Das Problem ist jetzt nur, dass durch p immer diese Fehlermeldung kommt...
Traceback (most recent call last):
File "C:\Python27\zahlenraten.py", line 8, in <module>
guess = input("Raten Sie. Sie haben noch", p, "Versuche: ")
TypeError: [raw_]input expected at most 1 arguments, got 3


Hab schon alles mögliche versucht...
Danke schonmal im Vorraus...
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

morice18 hat geschrieben:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Python27\zahlenraten.py", line 8, in <module>
    guess = input("Raten Sie. Sie haben noch", p, "Versuche: ")
TypeError: [raw_]input expected at most 1 arguments, got 3
Bitte setze deinen Code in Python-Code-Tags, sonst ist er nicht leserlich.

Statt input solltest du bei Python 2.x lieber raw_input verwenden. input akzeptiert jeden beliebigen Python-Code und ist damit brandgefährlich. Beim Einsatz von raw_input musst du das Ergebnis dann nur noch mit int() in den passenden Typ verwandeln.

Jetzt zur Frage an sich. Wie die Fehlermeldung ja sehr deutlich sagt akzeptiert raw_input (genau wie input) nur maximal ein Argument. Du übergibst allerdings drei Argumente. Setze die drei Einzelteile zu einem einzigen String zusammen.
morice18
User
Beiträge: 4
Registriert: Dienstag 1. November 2011, 21:18

welche drei argumente gibt es denn?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Bei dir? Die hier:

Code: Alles auswählen

input("Raten Sie. Sie haben noch", p, "Versuche: ")
Fein säuberlich mit `,` getrennt. `input` ist kein `print`.
morice18
User
Beiträge: 4
Registriert: Dienstag 1. November 2011, 21:18

ok.. soweit hab ich es kapiert... aber ich weiß immer noch nciht, wie ich das lösen soll..
-.-
Newcomer
User
Beiträge: 131
Registriert: Sonntag 15. Mai 2011, 20:41

mach es so: guess = input("Raten Sie. Sie haben noch" + p + "Versuche: ") Wird als ein String angesehen :D
Edit: Musst aber zuerst p in einen string umwandeln: p = str(p), dann funktionierts
Zuletzt geändert von Newcomer am Dienstag 1. November 2011, 22:41, insgesamt 1-mal geändert.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Na zum Beispiel mit Stringformatierung
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Newcomer hat geschrieben:mach es so: guess = input("Raten Sie. Sie haben noch" + p + "Versuche: ") Wird als ein String angesehen :D

Code: Alles auswählen

>>> p = 23
>>> "Raten Sie. Sie haben noch" + p + "Versuche: "
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects
Ach ja?
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Newcomer hat geschrieben:mach es so: guess = input("Raten Sie. Sie haben noch" + p + "Versuche: ") Wird als ein String angesehen :D
Bitte nicht schon wieder input verwenden. Zudem wird das so nicht funktionieren.

Code: Alles auswählen

TypeError: cannot concatenate 'str' and 'int' objects
morice18
User
Beiträge: 4
Registriert: Dienstag 1. November 2011, 21:18

grad nochmal ein paar dinge probiert.. da kommt immer noch der fehler:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:\Python27\zahlenraten.py", line 8, in <module>
    guess = input("Raten Sie. Sie haben noch" + p + "Versuche: ")
TypeError: cannot concatenate 'str' and 'int' objects
Newcomer
User
Beiträge: 131
Registriert: Sonntag 15. Mai 2011, 20:41

ich habs edited, schaut euch nochmal meinen beitrag an (-:
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

cofi hat geschrieben:Na zum Beispiel mit Stringformatierung
Um das für Einsteiger mal direkt mit einem kleinen Beispiel zu zeigen:

Code: Alles auswählen

>>> n = 667
>>> "{0}: the neighbor of the beast".format(n)
'667: the neighbor of the beast'
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Newcomer hat geschrieben:mach es so: guess = input("Raten Sie. Sie haben noch" + p + "Versuche: ") Wird als ein String angesehen :D
Edit: Musst aber zuerst p in einen string umwandeln: p = str(p), dann funktionierts
Mit der Korrektur läuft es zwar, die Programmlogik wird damit aber immer schlimmer. Die von cofi vorgeschlagene Stringformatierung ist hier das Mittel der Wahl.
Newcomer
User
Beiträge: 131
Registriert: Sonntag 15. Mai 2011, 20:41

gut dann so:

Code: Alles auswählen

guess = input("Raten Sie. Sie haben noch " + str(p) + " Versuche: ")
Raten Sie. Sie haben noch 5 Versuche: 
Perfekt (-:
BlackJack

@Newcomer: Nein, `input()` bei Python 2.7 zu verwenden ist *nicht* perfekt.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Code: Alles auswählen

In [12]: p = 2/3

In [13]: "Raten Sie. Sie haben noch " + str(p) + " Versuche: "
Out[13]: u'Raten Sie. Sie haben noch 0.666666666667 Versuche: '
Bitte sieh es ein: Wenn man Text formatieren will ist es nicht sinnvoll Strings zusammenzubasteln.
Newcomer
User
Beiträge: 131
Registriert: Sonntag 15. Mai 2011, 20:41

ich hab schon 3.1. Jedem das seinen (-:
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Newcomer hat geschrieben:ich hab schon 3.1. Jedem das seinen (-:
Natürlich kannst du programmieren wie du möchtest. Es ist aber unfair anderen ebenfalls eine suboptimale Vorgehensweise nahezulegen.
Newcomer
User
Beiträge: 131
Registriert: Sonntag 15. Mai 2011, 20:41

@ cofi und /me
ich verstehe nicht was an der foramtmethode besser sein soll:

Code: Alles auswählen

>>> p=2/3
>>> "{0}".format(p)
'0.6666666666666666'
>>> 
Newcomer
User
Beiträge: 131
Registriert: Sonntag 15. Mai 2011, 20:41

Aber ok es ist viel bequemer stringformatierung zu verwenden. In diesem sinne sehe ich es ein (-:
Antworten