Fehler beim random module

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
nb5code
User
Beiträge: 23
Registriert: Freitag 13. März 2015, 18:20

Hallo ich arbeite gerade an einem Spiel. Dabei möchte ich mir vier Farben( rot, gruen, blau, gelb ) mischen und ausgeben lassen

Code: Alles auswählen

from random import *
def getRandomColors():
    for i in range(4):
        print random.choice(["green", "blue", "yellow", "red"])

nur komischer Weise kommt dabei ein Fehler zustande :

Code: Alles auswählen

File "C:\IT\python\Game\src\Game.py", line 5
    print random.choice(["green", "blue", "yellow", "red"])
               ^
SyntaxError: invalid syntax
könnt ihr mir da vielleicht helfen ?

Danke! :D
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Du hast zwei Fehler: Du stern-importierst `random` und damit gibt es kein `random.choice`. Bevor das aber passiert: Du benutzt Python 3 als waere es Python 2. Da fehlen Klammern beim `print` Aufruf.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Dann gibt es auch noch einen Schönheitsfehler und einen semantischen Fehler. getRandomColors sollte laut PEP-8 get_random_colors heißen. Zudem sollte eine Methode mit get im Namen auch etwas zurückgeben, diese Methode gibt aber nur Werte aus.
nb5code
User
Beiträge: 23
Registriert: Freitag 13. März 2015, 18:20

ich Versuche eszu verbessern danke
nb5code
User
Beiträge: 23
Registriert: Freitag 13. März 2015, 18:20

ich dachte das sternchen importiert alles aus der Bibliothek
nezzcarth
User
Beiträge: 1634
Registriert: Samstag 16. April 2011, 12:47

nb5code hat geschrieben:ich dachte das sternchen importiert alles aus der Bibliothek
Genau das tut es auch: es importiert alles aus der Bibliothek in den öffentlichen Namensraum. 'import random' importiert die Bibliothek als solches, d.h. als eigenen Namensraum. Du machst einen Sternchenimport und versuchst 'choice' aus dem Namensraum random, der gar nicht existiert, aufzurufen. Allerdings sind Sternchenimport schlechter Stil. Entweder du importierst die gesamte Bibliothek, oder die spezifischen Namen, die du brauchst, z.B. 'from random import choice'.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

nb5code hat geschrieben:Hallo ich arbeite gerade an einem Spiel. Dabei möchte ich mir vier Farben( rot, gruen, blau, gelb ) mischen und ausgeben lassen
Dann ist Dein Ansatz auch an sich verkehrt und Du suchst ``random.shuffle``!

Unabhängig davon noch kurz eine Anmerkung zum Stil: Wenn man einen Rückgabewert in Python nicht braucht, so sollte man diesen per Konvention als Unterstrich benennen, bei Dir also:

Code: Alles auswählen

for _ in range(4):
    pass
Das zeigt dem Leser sofort an, dass der Name nicht mehr gebraucht wird und lenkt den Fokus nicht in falsche Richtungen. Bei Dir würde man erst einmal nach dem ``i`` im Schleifenrumpf suchen, bevor man kapiert, dass es auf das ``i`` gar nicht ankommt.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten