2017-09-24 3 views
-1

Ich habe Schwierigkeiten mit einem Projekt von mir. Ich versuche, einem Listenelement eine Variable zuzuweisen, das Element aufzurufen und den Prozess dann unbegrenzt zu wiederholen. Ich mache das in Turtle.Iterieren Sie eine Liste, weisen Sie jedem Objekt eine Variable zu und geben Sie es zurück

Der Zweck des Codes ist es, einen farbigen Kreis zu zeichnen. Derzeit habe ich es eingerichtet, dass es zufällig eine Farbe aus der Liste wählt. Ich würde es lieber von Anfang bis Ende durch die Liste gehen und wiederholt die nächste Farbe in die Liste zeichnen.

import turtle as t 
import random as r 

# list of shades of blue 
colourBlue = ['midnight blue', 'navy', 'cornflower blue', 'dark slate blue', 
'slate blue', 'medium slate blue', 'light slate blue', 'medium blue', 'royal 
blue', 'blue', 'dodger blue', 'deep sky blue'] 


# Call a colour from the list and draw a circle of said colour 
def circle(): 
    t.pendown() 
    t.begin_fill()   
    t.color(r.choice(colourBlue)) 
    t.circle(10) 
    t.end_fill() 
    t.penup() 

# Defines a function that loops through ColourBlue list 

def colourPick(): 
    colourBlueLen = len(colourBlue) 
    for i in range(11, colourBlueLen): 
     i = colourBlue[0] 

Bisher habe ich einen Weg festgelegt auf ein Element in der Liste zu wählen, aber ich bin unsicher, wie ich es einen Variablen zuweisen sollte, rufen Sie es in der t.color() Funktion und wiederholen Sie den Vorgang in der gesamten Liste .

Antwort

-1

ich eine Lösung mit Hilfe eines Freundes zu arbeiten, verwaltet.

colourBlue = ['midnight blue', 'navy', 'cornflower blue', 'dark slate blue', 
'slate blue', 'medium slate blue', 'light slate blue', 'medium blue', 'royal 
blue', 'blue', 'dodger blue', 'deep sky blue'] 

currentColour = 0 

# Establishes a function that calls a each colour from the list 
def circle(): 
    t.pendown() 
    t.begin_fill()   
    t.color(colourPick()) 
    t.circle(10) 
    t.end_fill() 
    t.penup() 

def colourPick(): 
    global currentColour 
    colourBlueLen = len(colourBlue) 

    # If the last colour in the list has been used, reset it back to 0 
    if currentColour == colourBlueLen: 
     currentColour = 0 

    colour = colourBlue[currentColour] 

    # Increment currentColour values 
    currentColour += 1 

    return colour 

circle() 
+0

Sie können den Modulo-Operator ('%') anstelle Ihrer 'if'-Anweisung verwenden, indem Sie 'currentColour = (currentColour + 1)% len (colourBlue)' ausführen, wodurch 'currentColour' im richtigen Bereich bleibt. – cdlane

0

Ich glaube, Sie wollen einfach nur ein Argument circle passieren:

def colourPick(): 
    for c in colourBlue: 
     circle(c) 

und dann diesen Parameter statt r.choice(colourBlue) verwenden.

1

Ich würde es eher durch die Liste von Anfang bis Ende und wiederholt die nächste Farbe

zeichnen Wenn Sie durch eine Liste von Farben, um arbeiten wollen, aber wollen nicht durch die Liste selbst gebunden werden, empfehle ich itertools.cycle(). Es ermöglicht Ihnen, Ihren Weg durch die Liste der Farben so oft immer und immer wieder zu arbeiten, wie Sie für die tatsächliche Anzahl der Farben ohne Rücksicht müssen:

from itertools import cycle 
from turtle import Turtle, Screen 

# list of shades of blue 
BLUE_SHADES = cycle(['midnight blue', 'navy', 'cornflower blue', 'dark slate blue', \ 
    'slate blue', 'medium slate blue', 'light slate blue', 'medium blue', 'royal blue', \ 
    'blue', 'dodger blue', 'deep sky blue']) 

# Call a colour from the list and draw a circle of said colour 
def circle(turtle): 
    turtle.color(next(BLUE_SHADES)) 
    turtle.begin_fill() 
    turtle.circle(50) 
    turtle.end_fill() 

screen = Screen() 

yertle = Turtle(visible=False) 
yertle.speed('fastest') 

for _ in range(120): 
    circle(yertle) 
    yertle.right(3) 

screen.exitonclick() 

enter image description here

Wenn Sie würden lieber einfach Arbeit einmal durch die Farbliste, das ist auch einfach. Verwenden Sie einfach die Farbliste selbst als Iteration Ziel:

from turtle import Turtle, Screen 

# list of shades of blue 
BLUE_SHADES = ['midnight blue', 'navy', 'cornflower blue', 'dark slate blue', \ 
    'slate blue', 'medium slate blue', 'light slate blue', 'medium blue', 'royal blue', \ 
    'blue', 'dodger blue', 'deep sky blue'] 

# Call a colour from the list and draw a circle of said colour 
def circle(turtle, color): 
    turtle.color(color) 
    turtle.begin_fill() 
    turtle.circle(50) 
    turtle.end_fill() 

screen = Screen() 

yertle = Turtle(visible=False) 
yertle.speed('fastest') 

for shade in BLUE_SHADES: 
    circle(yertle, shade) 
    yertle.right(360/len(BLUE_SHADES)) 

screen.exitonclick() 

enter image description here

+0

Das ist super, vielen Dank. Ich habe versucht, die Lösung zu googeln und bin nie auf Tools oder die Cycle-Funktion gestoßen. Wird definitiv die Zukunft nutzen. – svantem

Verwandte Themen