Seite 1 von 1
Haus vom Nikolaus / Farben
Verfasst: Mittwoch 24. Januar 2007, 12:11
von black hacker
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)
Verfasst: Mittwoch 24. Januar 2007, 13:16
von BlackJack
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()`.
Verfasst: Mittwoch 24. Januar 2007, 20:24
von Sr4l
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

habe jetzt farben zufällig eingesetzt macht aber auch keinen großen unterschied.
Verfasst: Donnerstag 25. Januar 2007, 14:48
von BlackJack
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.
Verfasst: Donnerstag 25. Januar 2007, 14:59
von Sr4l
Es wäre einfach wenn man den Winkel immer absolute angibt 0° = rechts
90° = unten usw. einmal rum halt.