Haus vom Nikolaus / Farben

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.
black hacker
User
Beiträge: 2
Registriert: Mittwoch 24. Januar 2007, 12:03

Haus vom Nikolaus / Farben

Beitragvon black hacker » Mittwoch 24. Januar 2007, 12:11

alos wir studenten von der uni karlsruhe haben ein problem
ihr kennt sicher das haus vom nikolaus... wir haben auch schon alles bis auf eine aufgabe:
jede linie soll in einer verschiedenen farbe sein ,die vorher in einer liste definiert wurden. aus dieser liste werden die farben zyklisch entnommen
( 4 farben)
unser ansatz

Code: Alles auswählen

from turtle import *
width (5)
forward(50)
left(135)
forward(70)
right(90)
forward(70)
right(90)
forward(35)
right(90)
forward (70)
right(135)
forward(50)
right(90)
forward(50)
right(90)
forward(50)
BlackJack

Beitragvon BlackJack » Mittwoch 24. Januar 2007, 13:16

Das ist aber nicht das Haus vom Nikolaus. Oder der Architekt hatte zuviel Glühwein. ;-)

Was genau ist denn jetzt die Frage? Die Farbe ändert man mit der `color()`-Funktion.

Ihr könntet da jetzt nach jeder Bewegung einen Befehl einfügen, der die entsprechende Farbe aus der Liste holt, aber eigentlich würde man für so etwas eine Schleife schreiben.

Am besten eine, die über eine Liste mit Tupeln mit geeigneten Bewegungsdaten iteriert, dann kann man die Bewegungen als Daten auffassen. Und nach jeder Vorwärtsbewegung muss man die nächste Farbe wählen. Dazu kann man manuell einen Index verwalten. Oder wenn die Bewegungsdaten passend gewählt wurden, mit `enumerate()` einen Index generieren, oder vielleicht auch Funktionen aus dem `itertools`-Modul benutzt, wie `izip()` und `cycle()`.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Beitragvon Sr4l » Mittwoch 24. Januar 2007, 20:24

Code: Alles auswählen

import time
import turtle as t
from random import randint as rnd

colors = ["blue","red","green","yellow","grey","orange"] #moegliche farben
t.width (5) # linien staerke

def tl(winkel,mass):
    t.color(colors[rnd(0,len(colors)-1)])
    t.left(winkel)
    t.forward(mass)
           
def tr(winkel,mass):
    t.color(colors[rnd(0,len(colors)-1)])
    t.right(winkel)
    t.forward(mass)
       
# Programm ablauf
tl(180,50)
tr(135,70)
tl(135,50)
tr(135,35)
tr(90,35)
tr(45,50)
tr(135,70)
tl(135,50)

# Sleep dann geht Tk Fenster zu
time.sleep(5)


das hat mal spaß gemacht :-D
habe jetzt farben zufällig eingesetzt macht aber auch keinen großen unterschied.
BlackJack

Beitragvon BlackJack » Donnerstag 25. Januar 2007, 14:48

Eine Lösung mit den Bewegungen als "Daten":

Code: Alles auswählen

import turtle
from turtle import left, right
from itertools import cycle, izip

def main():
    colors = ('black', 'red', 'green', 'blue')
    data = ((left, 0, 50), (left, 135, 70), (right, 90, 70),
            (right, 90, 35), (right, 90, 70), (right, 135, 50),
            (right, 90, 50), (right, 90, 50))
   
    turtle.width(5)
   
    for color, (rotate_func, angle, distance) in izip(cycle(colors), data):
        turtle.color(color)
        rotate_func(angle)
        turtle.forward(distance)


Man könnte es auch auf eine Drehrichtung beschränken und einfach die entsprechenden Winkel nehmen um den gleichen Effekt zu erhalten. Dann braucht man ein Datum weniger pro Schritt.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Beitragvon Sr4l » Donnerstag 25. Januar 2007, 14:59

Es wäre einfach wenn man den Winkel immer absolute angibt 0° = rechts
90° = unten usw. einmal rum halt.

Wer ist online?

Mitglieder in diesem Forum: __deets__, Google [Bot]