Zahlen Rate Spiel

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.
kRew
User
Beiträge: 9
Registriert: Mittwoch 17. November 2010, 18:40

Hallo, ich bin neu hier und auch neu im Umgang mit Python.
Ich habe da mal eine Frage und stelle am besten den Code mal hier rein.
Vielleicht könnt ihr mir helfen ihn zu korregieren, da ich nicht weiß, was daran falsch ist.
Vielen Dank :)

EDIT: Ich benutze Python 3.2a.3

Code: Alles auswählen

import random
import os
def main():
    os.system("title Random Numbers Generator")
    lower = input("Lower limit: ")
    upper = input("Upper limit: ")
    quantity = input("Qunatity: ")
    n = 0
    while n<quantity:
        print random.randit(lower, upper)
        n += 1
    if n == quantity:
        input ("Press Enter")
        os.system("cls")
        main()

main()
Barabbas
User
Beiträge: 349
Registriert: Dienstag 4. März 2008, 14:47

Hallo,

mir fallen zunächst zwei Fehler auf:

* os.system() verwendest du falsch. Hier ist es aber ohnehin überflüssig, also lösche die Zeile einfach.
* die Funktion randit() gibt es nicht. Du meinst sicher randint()

Grundsätzlich kann man natürlich besser helfen, wenn man Fehlermeldungen hat - aber in diesem Fall waren die Fehler ja noch recht gut auszumachen :)

Schöne Grüße,

brb

//edit: \\
Wie numerix schon sagt, gibt es auch einige konzeptionelle Probleme bzw. Sachen, die man besser machen könnte. So wird dein Programm irgendwann an das Rekursions-Limit stoßen und einen entsprechenden Fehler produzieren.
Zuletzt geändert von Barabbas am Mittwoch 17. November 2010, 19:11, insgesamt 1-mal geändert.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

kRew hat geschrieben:Vielleicht könnt ihr mir helfen ihn zu korregieren, da ich nicht weiß, was daran falsch ist.
Evtl. sollte man dir eher sagen, was daran richtig ist - dann ist man schneller fertig ...
Im Ernst: Woher beziehst du deine Python-Kenntnisse? Hast du ein Buch? Ein Tutorial? Lernst du es in der Schule? Arbeitet dein Tutorial/Buch/Schule auch mit Python 3.x?

Auch wenn es mit deinem Code nichts zu tun hat: Warum nutzt du keine finale Version, z.B. 3.1?
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

Außerdem ist bei Python 3k `print` eine Funktion, kein Statement mehr:

Code: Alles auswählen

print(random.randint(lower, upper))
kRew
User
Beiträge: 9
Registriert: Mittwoch 17. November 2010, 18:40

numerix hat geschrieben:
kRew hat geschrieben:Vielleicht könnt ihr mir helfen ihn zu korregieren, da ich nicht weiß, was daran falsch ist.
Evtl. sollte man dir eher sagen, was daran richtig ist - dann ist man schneller fertig ...
Im Ernst: Woher beziehst du deine Python-Kenntnisse? Hast du ein Buch? Ein Tutorial? Lernst du es in der Schule? Arbeitet dein Tutorial/Buch/Schule auch mit Python 3.x?

Auch wenn es mit deinem Code nichts zu tun hat: Warum nutzt du keine finale Version, z.B. 3.1?
Wir arbeiten mit 3.x in der Schule. Jedoch möchte ich gerne etwas vorarbeiten und da unser Lehrer sehr sehr langsam ist mach ich das lieber selbst.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

@kRew
Es ist aber kein Vorarbeiten, wenn man mit einer unstable Programmiersprache arbeitet.

Die meisten hier arbeiten vermutlich mit 2.5 - 3.1
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
BlackJack

Und man kann verschiedene Typen nicht einfach auf grösser oder kleiner Vergleichen. Das Skript besteht eigentlich nur aus Fehlern. :-)
kRew
User
Beiträge: 9
Registriert: Mittwoch 17. November 2010, 18:40

BlackJack hat geschrieben:Und man kann verschiedene Typen nicht einfach auf grösser oder kleiner Vergleichen. Das Skript besteht eigentlich nur aus Fehlern. :-)
Also ich habe jetzt Python 3.1 gibt es denn eine einfache Lösung für das, was ich vor habe? Mir reicht ja eigentlich schon der Befehl für das generieren einer zufälligen Zahl, aber wenn ich "random.randint" ausprobiere sagt das Programm folgendes:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:/Users/Stephan/Python/Python3.1/test.py", line 9, in <module>
    random.randint(lower, upper)
NameError: name 'lower' is not defined
Vielleicht könnt ihr mir ein wenig unter die Arme greifen, da ich denke das so etwas "simples" nicht so viel arbeit ist.

p.s: Nein, das ist keine Hausaufgabe für den Unterricht.
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

kRew hat geschrieben:
BlackJack hat geschrieben:Und man kann verschiedene Typen nicht einfach auf grösser oder kleiner Vergleichen. Das Skript besteht eigentlich nur aus Fehlern. :-)
Also ich habe jetzt Python 3.1 gibt es denn eine einfache Lösung für das, was ich vor habe? Mir reicht ja eigentlich schon der Befehl für das generieren einer zufälligen Zahl, aber wenn ich "random.randint" ausprobiere sagt das Programm folgendes:

Code: Alles auswählen

Traceback (most recent call last):
  File "C:/Users/Stephan/Python/Python3.1/test.py", line 9, in <module>
    random.randint(lower, upper)
NameError: name 'lower' is not defined
Hast du vorher die Variable `lower` definiert? Wenn nicht, dann ist bei dir was kaputt :)
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Wie wäre es erst mal mit ein paar Grundlagen ?
Du musst dort Zahlen reinschreiben und keine undefinierten Variablen.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
kRew
User
Beiträge: 9
Registriert: Mittwoch 17. November 2010, 18:40

Also, ich möchte folgendes.
In diesem Code:

Code: Alles auswählen

gz="05"
tipp=input("Geben sie hier eine Zahl von 1-9 ein: ")

if tipp == "gz":
    print ("Sie haben die richtige Zahl erraten")

elif tipp > "gz":
    print ("Die von ihnen eingegebene Zahl ist zu klein")

elif tipp < "gz":
    print ("Die von ihnen eingegeben Zahl ist zu groß")

input()
möchte ich, dass die Zahl 1-9 zufällig generiert wird.
Was muss ich dafür machen?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Code: Alles auswählen

>>> lower = int(input("lower bound: "))
lower bound: 1
>>> upper = int(input("upper bound: "))
upper bound: 9
>>> import random
>>> random.randint(lower, upper)
8
kRew
User
Beiträge: 9
Registriert: Mittwoch 17. November 2010, 18:40

Und wie würde das aussehen?
wie kann ich denn das ergebnis von dem "random.randint" zur Variablen machen?
Kann einer mal ein Beispiel posten?
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Mein Tipp wäre: Akzeptiere die Vermittlungsgeschwindigkeit deines Informatiklehrers und beschäftige dich mit dem im Unterricht Vermittelten so gründlich, dass du das wenigstens richtig gut verstanden hast und anwenden kannst. Wenn du das geschafft hast, dann nimmst du dir mal das deutsche Tutorial vor und dann kannst du dir deine Fragen bald selbst beantworten.
kRew
User
Beiträge: 9
Registriert: Mittwoch 17. November 2010, 18:40

So, ich glaube ich habs rausbekomme:

Code: Alles auswählen

lo= int("1")
up= int("10")
import random
gz =(random.randint(lo, up))
ti = int(input("Geben sie eine Zahl zwischen 1 u. 9: "))
if ti == gz:
    print ("Sie haben die richtige Zahl erraten")

elif ti > gz:
    print ("Die von ihnen eingegebene Zahl ist zu klein")

elif ti < gz:
    print ("Die von ihnen eingegebene Zahl ist zu groß")

input("Press <enter> to exit")
Also bei mir kommt da zwar immer, dass meine Zahl zu klein bzw. groß ist, jedoch denke ich ist das der Beweis dafür, dass es funktioniert.
nomnom
User
Beiträge: 487
Registriert: Mittwoch 19. Mai 2010, 16:25

kRew hat geschrieben:So, ich glaube ich habs rausbekomme:

Code: Alles auswählen

lo= int("1")
up= int("10")
import random
gz =(random.randint(lo, up))
ti = int(input("Geben sie eine Zahl zwischen 1 u. 9: "))
if ti == gz:
    print ("Sie haben die richtige Zahl erraten")

elif ti > gz:
    print ("Die von ihnen eingegebene Zahl ist zu klein")

elif ti < gz:
    print ("Die von ihnen eingegebene Zahl ist zu groß")

input("Press <enter> to exit")
Also bei mir kommt da zwar immer, dass meine Zahl zu klein bzw. groß ist, jedoch denke ich ist das der Beweis dafür, dass es funktioniert.
Äh,

Code: Alles auswählen

lo= int("1")
up= int("10")
ist Unsinn, das ist verständlicher und kürzer:

Code: Alles auswählen

lo = 1
up = 10
Auch wenn die Variablennamen alle unschön zu lesen sind. Keiner weiß was sie bedeuten ;)
kRew
User
Beiträge: 9
Registriert: Mittwoch 17. November 2010, 18:40

nomnom hat geschrieben:
kRew hat geschrieben:So, ich glaube ich habs rausbekomme:

Code: Alles auswählen

lo= int("1")
up= int("10")
import random
gz =(random.randint(lo, up))
ti = int(input("Geben sie eine Zahl zwischen 1 u. 9: "))
if ti == gz:
    print ("Sie haben die richtige Zahl erraten")

elif ti > gz:
    print ("Die von ihnen eingegebene Zahl ist zu klein")

elif ti < gz:
    print ("Die von ihnen eingegebene Zahl ist zu groß")

input("Press <enter> to exit")
Also bei mir kommt da zwar immer, dass meine Zahl zu klein bzw. groß ist, jedoch denke ich ist das der Beweis dafür, dass es funktioniert.
Äh,

Code: Alles auswählen

lo= int("1")
up= int("10")
ist Unsinn, das ist verständlicher und kürzer:

Code: Alles auswählen

lo = 1
up = 10
Auch wenn die Variablennamen alle unschön zu lesen sind. Keiner weiß was sie bedeuten ;)
Eine kleine Übersetzung:
up = Höchste Zahl
lo = Niedrigste Zahl
gz = Geheim Zahl
ti = Tipp

Aber sonst ist es richtig oder?
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

kRew hat geschrieben:Eine kleine Übersetzung:
up = Höchste Zahl
lo = Niedrigste Zahl
gz = Geheim Zahl
ti = Tipp
Macht es dich nicht stutzig, dass man eine Uebersetzung braucht, um den Code (problemlos) zu verstehen? Willst du so einen Code von anderen Leuten lesen?

1. Importe sollten ganz an den Anfang der Datei, wenn keine trifftigen Gruende dagegen sprechen.
2. Die Klammern um `random.randint..` sind ueberfluessig.
--
3. Du solltest deine Leerzeichen um Operatoren einheitlich links und rechts setzen, gleiches gilt bei Funktionsaufrufen (dort aber keine).
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

...bei den anderen war cofi schon schneller

4. Bei einer Funktion, wie "print" in Python3 ist. Setzt man für gewöhnlich keine Leerzeichen zwischen Funktion und Klammer.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
kRew
User
Beiträge: 9
Registriert: Mittwoch 17. November 2010, 18:40

Okay, vielen dank für die Tipps :) Ich werde in Zukunft versuchen mich an alle diese Sachen zuhalten und werde mal morgen noch ein wenig rumexperementieren. Ich hoffe dann ist es für alle einfacher es zu verstehen. Also schonmal danke für die Hilfe.
Antworten