Seite 1 von 2

Zahlenraten

Verfasst: Dienstag 1. November 2011, 21:22
von morice18
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...

Re: Zahlenraten

Verfasst: Dienstag 1. November 2011, 21:34
von /me
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.

Re: Zahlenraten

Verfasst: Dienstag 1. November 2011, 22:18
von morice18
welche drei argumente gibt es denn?

Re: Zahlenraten

Verfasst: Dienstag 1. November 2011, 22:28
von cofi
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`.

Re: Zahlenraten

Verfasst: Dienstag 1. November 2011, 22:33
von morice18
ok.. soweit hab ich es kapiert... aber ich weiß immer noch nciht, wie ich das lösen soll..
-.-

Re: Zahlenraten

Verfasst: Dienstag 1. November 2011, 22:37
von Newcomer
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

Re: Zahlenraten

Verfasst: Dienstag 1. November 2011, 22:38
von cofi
Na zum Beispiel mit Stringformatierung

Re: Zahlenraten

Verfasst: Dienstag 1. November 2011, 22:39
von cofi
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?

Re: Zahlenraten

Verfasst: Dienstag 1. November 2011, 22:40
von /me
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

Re: Zahlenraten

Verfasst: Dienstag 1. November 2011, 22:42
von morice18
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

Re: Zahlenraten

Verfasst: Dienstag 1. November 2011, 22:44
von Newcomer
ich habs edited, schaut euch nochmal meinen beitrag an (-:

Re: Zahlenraten

Verfasst: Dienstag 1. November 2011, 22:44
von /me
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'

Re: Zahlenraten

Verfasst: Dienstag 1. November 2011, 22:46
von /me
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.

Re: Zahlenraten

Verfasst: Dienstag 1. November 2011, 22:49
von Newcomer
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 (-:

Re: Zahlenraten

Verfasst: Dienstag 1. November 2011, 22:57
von BlackJack
@Newcomer: Nein, `input()` bei Python 2.7 zu verwenden ist *nicht* perfekt.

Re: Zahlenraten

Verfasst: Dienstag 1. November 2011, 22:59
von cofi

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.

Re: Zahlenraten

Verfasst: Dienstag 1. November 2011, 23:00
von Newcomer
ich hab schon 3.1. Jedem das seinen (-:

Re: Zahlenraten

Verfasst: Dienstag 1. November 2011, 23:02
von /me
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.

Re: Zahlenraten

Verfasst: Mittwoch 2. November 2011, 11:28
von Newcomer
@ 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'
>>> 

Re: Zahlenraten

Verfasst: Mittwoch 2. November 2011, 11:29
von Newcomer
Aber ok es ist viel bequemer stringformatierung zu verwenden. In diesem sinne sehe ich es ein (-: