Zahlenraten mit zufalls-variable

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
zweiundvierzig
User
Beiträge: 4
Registriert: Donnerstag 2. Dezember 2010, 10:47

Seid Gegrüsst ihr lieben Liebenden :)

Ich bin jetzt sicher seit 3 oder 4 Monaten an Phyton dran und ich würde sagen, ja ich mach gute vortschritte. Ich hab schon viel gelernt, durch Tutorials und an beispielen.
Jetzt habe ich aber ein problem, das mir schon seit Tagen den Kopf rauchen lässt.
Ich habe das geschrieben, wie auch duch ein beispiel gelernt:

Code: Alles auswählen

antw = 42
vers = 0
i = 0

while vers != antw:
    vers = input("Wieviel gedenkst du zu tippen ? ")

    if vers > antw:
        print "weniger"

    if vers < antw:
        print "mehr"

    i = i + 1

print "Top, du hattest, ", i, " versuche"
Der code funktioniert komischerweise nur bei Xubuntu mit Python 2.6.6. unter windows mit Python 3.1.2, zeigt es mir nach (print "weniger") im code dass das " nach weniger: invalid syntax ist. Habe ich da was überlesen, oder gar ein falsches tutorial angeschaut ?

Aber zu meiner frage: Ich möchte gerne das die Variable "antw" immer wieder nach jedem erfolgreichem erraten sich selber einen neuen Wert gibt. Also eine zufallsvariable machen. Ich habe bei google um hilfe gefragt, aber ich hab nur ein tutorial gefunden das mir soweit geholfen hat, das ich weis, ich muss "input random" anwenden, doch wie genau konnte ich aus dem tutorial nicht entschlüsseln.
Also ich weis das ich am anfang des Scripts random inputen muss, also zuerst input random, um das "zufalls" modul zu laden. Aber dann komm ich nicht weiter, ich habe sicherlich weitergelesen, aber es gab dann einen Knüppel im Gehirn. ;)

Daher wollte ich hier mal fragen.

freundlichst Grüsse ich Euch
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

Hallo! Ab Python 3 ist print eine Funktion und muss entsprechend mit

Code: Alles auswählen

print("hallo")
aufgerufen werden.

Was die Zufallszahlen angeht: Google ist da doch recht eindeutig, wenn man nach "Python Zufallszahlen" sucht.

Code: Alles auswählen

import random
print(random.randint(1,10))
Besten Gruß,

brb
zweiundvierzig
User
Beiträge: 4
Registriert: Donnerstag 2. Dezember 2010, 10:47

Ah vielen dank alles klar jetzt wie das mit dem print ist.

Zum zufall, das begreif ich ja was du gepostet hast, also soweit, nur wie wende ich dies auf eine Variable an, so dass wen ich die richtige zahl erraten habe, das spiel wieder von vorne beginnt und die variable einen neuen anderen Wert hat. ? Oder begreife ich jetzt was nicht ? ;)
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Wenn du das nicht weißt, solltest du dir vieleicht mal die Grundlagen der Programmierung ansehen.

Die Funktion "random.randint(1,10)" gibt dir einen Integerwert zwischen 1 und 10 zurück, diesen kannst du jederzeit einer Variable zuweisen.

btw. Der Grund warum "print" in Python 3.1 nicht mehr ohne Klammern funktioniert, liegt daran das "print" in Python 3.x nun eine build-in Funktion ist und kein keyword mehr.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Was auch immer du an Tutorials durchgelesen hast, es war definitiv nicht ausreichend. Nimm das offizielle Python-Tutorial. Dort lernst du z.B. in Teil 6 mehr über das import-Statement kennen. Das random-Modul muss nämlich nicht eingegeben (input) sondern importiert (import) werden. Wie das dann weiter funktioniert steht in der Dokumentation zu random.

Dann kommt die nächste Falle. Python in Version 2 und in Version 3 sind - bewusst! - nicht vollständig kompatibel. Das bedeutet unter anderem, dass print in Python 3 kein Statement mehr ist sondern eine Funktion und daher mit Klammern aufgerufen werden muss. Zudem sollte man unter Python 2 besser raw_input() statt input() verwenden. Unter http://docs.python.org/release/3.0.1/whatsnew/3.0.html findest du einiges über die Unterschiede zwischen den Versionen.

Noch eine kleine Anmerkung zum Code. Bringt es dir irgendetwas, die Variablen vers und antw statt versuch und antwort zu nennen? Zweiteres ist deutlich besser lesbar und Code wird deutlich häufiger gelesen als geschrieben.
zweiundvierzig
User
Beiträge: 4
Registriert: Donnerstag 2. Dezember 2010, 10:47

Das random-Modul muss nämlich nicht eingegeben (input) sondern importiert (import) werden.

jop das war ein flüchtigkeits fehler von mir. natürlich import :)

ausserdem habe ich mal richtig gelesen und es selbst herausgefunden...

Code: Alles auswählen

import random

antw = (random.randint(1,100))
man ich könnt mir an den kopf schlagen...

Und das tut, werde ich mir doch gleich auch mal in den kopf hämmern.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

:| - was haben die klammer um die random-Funktion zu suchen ?
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
zweiundvierzig
User
Beiträge: 4
Registriert: Donnerstag 2. Dezember 2010, 10:47

hmm, hab ich so aufgenommen, muss sagen es funktioniert auch wunderbar so :)

edit meint: es funzt auch ohne klammern.
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

Barabbas hat geschrieben:

Code: Alles auswählen

import random
print(random.randint(1,10))
zweiundvierzig hat geschrieben:

Code: Alles auswählen

import random

antw = (random.randint(1,100))
Xynon1 hat geschrieben::| - was haben die klammer um die random-Funktion zu suchen ?
zweiundvierzig hat geschrieben:hmm, hab ich so aufgenommen, muss sagen es funktioniert auch wunderbar so :)
Ich vermute mal, du hast das angenommen, weil dir der Unterschied zwischen Schlüsselwort und Funktion nicht klar ist.
Antworten