Kleines Problem

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
cz3kit
User
Beiträge: 74
Registriert: Freitag 9. Januar 2009, 16:24

Ich hab so ein kleines Problem wo ich nicht weiß wie ich es lösen kann.

ich hab mal eine Klasse für eine Ampel geschriebn, nur so um Klassen zu üben. So jetzt will ich gern die Ausgabe machen und ich habe mir das so vorgestellt:
O wenn rot is soll halt nur der erste kreis rot sein
O wenn gelb ist dan der mitlere
O und zu guter letzt der unterste kreis soll grün sein

Code: Alles auswählen

for i in range(3):
    if ampel.getcolor() == "RED":
        ampel.getcolor()
    print "%3s"  %"O"
    WConio.normvideo()

so in etwa stell cih mir das vor, nur das problem ist das er alle kreise rot macht, naja irgendwie logisch gibt es aber eine möglichkeit das er nur den ersten nur rot macht??

MfG cz3kit
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

1.) Was hat das bei den Snippets zu suchen? Ist doch wohl eher ein "Problem" ;-)

2.) Soll das ganze in einer Konsole ausgegeben werden oder hast Du eine GUI dafür?

3.) Mit dem Code kann wohl niemand etwas anfangen, weil es weder zeigt, wie etwas gemalt wird, noch, wie Deine Objkete aussehen! Oder soll das print tatsächlich Deine Ausgabe sein?

In Zeile 2 zählst Du imho sinnfrei von 0 bis 2. Dann prüfst Du dwohl, ob in ampel ein Attribut "ROT" als Wert hat (dazu sei gesagt, dass Du keinen getter in Python brauchst - dafür gibt es bei Bedarf properties).

In Zeile 4 kapiere ich den erneuten Aufruf nicht? Was soll der bewirken?

Poste doch mal Minimum Deine Klasse hier und ggf. den kompletten Code. So kann man Dir nicht wirklich helfen.

Sollte der zu lang sein (>50 Zeilen), dann lagere ihn am besten in paste.pocoo.org aus :-)
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Hier sollten nur *funktionierende* snnipets rein, also ist dieser Thread besser in "allgemeine Fragen" aufgehoben. Nimm doch '-', wenn die Lampe nicht leuchtet und 'O', wenn sie leuchtet. Dann haste es auch gleich plattformunabhängig ;)
cz3kit
User
Beiträge: 74
Registriert: Freitag 9. Januar 2009, 16:24

ok ich stell mal das ganze rein^^
sorry ah und kein GUI

Code: Alles auswählen

class CarTraffic(object):

    def __init__(self, color):

        mytuple = ("GREEN","YELLOW","RED")
        if color not in mytuple:
            print "Ist nicht drin"
        else:
            self.__color = color

    def getcolor(self):

        import WConio

        if self.__color == "RED":
            WConio.textcolor(12)
            return self.__color
        elif self.__color == "YELLOW":
            WConio.textcolor(14)
            return self.__color
        elif self.__color == "GREEN":
            WConio.textcolor(10)
            return self.__color
        else:
            WConio.textcolor(7)
            return self.__color

    def setRed(self):

        import time

        period = time.mktime(time.localtime())
        period += 3.0
        period1 = time.mktime(time.localtime())

        while period != period1:
            period1 = time.mktime(time.localtime())
        self.__color = "RED"

    def setYellow(self):

        import time

        period = time.mktime(time.localtime())
        period += 6.0
        period1 = time.mktime(time.localtime())

        while period != period1:
            period1 = time.mktime(time.localtime())
        self.__color = "YELLOW"

    def setGreen(self):

        import time

        period = time.mktime(time.localtime())
        period += 3.0
        period1 = time.mktime(time.localtime())

        while period != period1:
            period1 = time.mktime(time.localtime())
        self.__color = "GREEN"

    def setWhite(self):

        self.__color = "WHITE"

if __name__ == "__main__":

    import os, WConio


    ampel = CarTraffic("RED")

    for i in range(3):
        ampel.getcolor()
        print "%3s"  %"O"
        ampel.setWhite()
        
joa so siehts aus
sorry nochma
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hui ... das sieht irgend wie jetzt grausig aus ;-)

imports schreibt man nidR alle zu Beginn eines Moduls.

Deine setXYZ-Mthoden bringen nix, weil sie ja eh von außen aufgerufen werden müßten, damit es zyklisch funktioniert. Daher kann man dann die Kontrolle über die Zeiten dazwischen auch extern regeln!

Das Datenmodell ist daneben! Du hast eigentlich keine Klasse für eine "Ampel", sondern für eine "Lampe" geschrieben! Eine Ampel hat doch aber drei Lampen. Also braucht es eine Art liste oder dict dazu.

Du solltest Dir imho lieber noch einmal die Grundlagen im Tutorial erarbeiten!

Ich würde das erst einmal ohne Klassen angehen und das eher über eine Datenstruktur wie eine Liste und/oder Dictionary abbilden.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hier mal meine Lösung ohne Klassen (und ohne Farbe)

Code: Alles auswählen

from itertools import cycle
from time import sleep

#
# defines the different phases of a traffic light
# (string of symbols, time in seconds)
# symbols:
#   - : no light
#   r / y / g : red / yellow / green light
#
# seconds to wait until next status
#
phases = (
    (("--g"), 10),
    (("-y-"), 2),
    (("r--"), 10),
    (("rg-"), 2)
)


def cycle_traffic_lights(phases):
    """
    cycles through the given phases. Pauses are evaluated by the given seconds
    """
    for phase in cycle(phases):
        print phase[0]
        sleep(phase[1])


if __name__ == "__main__":
    cycle_traffic_lights(phases)
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Ich schlage ein

Code: Alles auswählen

for color, time in cycle(phases):
für Zeile 26 vor, um Indexzugriffe zu vermeiden.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Gute Idee! :-)
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Code: Alles auswählen

mytuple = ("GREEN","YELLOW","RED")
Wäre eindeutig ein Klassenattribut - genauer gesagt, imho ein (Pseudo-)enum.

Code: Alles auswählen

class MyClass(object):
    COLORS = GREEN, YELLOW, RED = range(3)
Ansonsten lies dir bitte das wirklich sehr gute Python Tutorial auf docs.python.org durch.
Antworten