Ein Python-Programm, das von einem Schüler geschrieben wurde. Es war zum ersten Mal gut gemacht. Zunächst können Sie einen beliebigen Schreibstil verwenden. Ich denke.
Um jedoch schwierige Programme erstellen zu können, ist es wichtig, Ihren Verstand zu organisieren und das Programm leicht verständlich zu machen. Ich habe dieses Programm als Beispiel umgeschrieben.
Ich konnte eine schöne Figur zeichnen. Es ist wunderbar, einen Weg zu finden, um bunte Farbtöne hervorzuheben. Ich habe es geschafft, indem ich die Bedingungen der if-Anweisung und der Berechnungsformel sorgfältig geprüft habe.
number = int(input("Wie viele Kreise zeichnen Sie?"))
R = 1.0
G = 0.0
B = 0.0
color = 0
from turtle import *
delay(5)
shape("turtle")
for i in range(number):
color = int(360/number*i)
if color <= 60:
R = 1.0
G = color/60
B = 0.0
elif color <= 120:
R = 2.0-color/60
G = 1.0
B = 0.0
elif color <= 180:
R = 0.0
G = 1.0
B = color/60-2.0
elif color <= 240:
R = 0.0
G = 4.0-color/60
B = 1.0
elif color <= 300:
R = color/60-4.0
G = 0.0
B = 1.0
elif color <= 360:
R = 1.0
G = 0.0
B = 6.0-color/60
pencolor(R,G,B)
circle(100)
left(360/number)
done()
Ausführungsergebnis
Import bewegt sich zuerst Der Teil zum Ermitteln des RGB-Werts ist funktionalisiert Ich kann die Regelmäßigkeit der Formel in der if-Anweisung nicht sehen. Ich denke, es wurde durch Versuch und Irrtum gemacht. In einen regulären Ausdruck geändert, der das gleiche Ergebnis liefert. Der bedingte Ausdruck der if-Anweisung enthält =, aber das Ergebnis ändert sich nicht, selbst wenn = entfernt wird. Farbe Wenn man bedenkt, dass der Bereich zwischen 0 und 359 liegt, erscheint es angemessener, nicht = hinzuzufügen.
import turtle
def color2rgb(color):
if color < 60:
R = 1.0
G = color/60
B = 0.0
elif color < 120:
R = 1.0-(color-60)/60
G = 1.0
B = 0.0
elif color < 180:
R = 0.0
G = 1.0
B = (color-120)/60
elif color < 240:
R = 0.0
G = 1.0-(color-180)/60
B = 1.0
elif color < 300:
R = (color-240)/60
G = 0.0
B = 1.0
elif color < 360:
R = 1.0
G = 0.0
B = 1.0-(color-300)/60
return(R, G, B)
def draw(number):
turtle.delay(5)
turtle.shape("turtle")
for i in range(number):
color = int(360 / number * i)
turtle.pencolor(color2rgb(color))
turtle.circle(100)
turtle.left(360 / number)
turtle.done()
number = int(input("Wie viele Kreise zeichnen Sie?"))
draw(number)
Wenn Sie sich color2rgb () genau ansehen, haben die Werte von R, G und B dieselbe Form mit einer Phasenverschiebung von 120. Sie können die if-Anweisung auch stoppen und eine Tabelle erstellen. Aber wenn Sie es in eine Tabelle schaffen, wird es etwas weniger lesbar sein. Lass uns das machen.
import turtle
def color2r(color):
color = color % 360
if color < 60:
R = 1.0
elif color < 120:
R = 1.0-(color-60)/60
elif color < 180:
R = 0.0
elif color < 240:
R = 0.0
elif color < 300:
R = (color-240)/60
elif color < 360:
R = 1.0
return R
def color2rgb(color):
return color2r(color), color2r(color-120), color2r(color-240)
def draw(number):
turtle.delay(5)
turtle.shape("turtle")
for i in range(number):
color = int(360 / number * i)
turtle.pencolor(color2rgb(color))
turtle.circle(100)
turtle.left(360 / number)
turtle.done()
number = int(input("Wie viele Kreise zeichnen Sie?"))
draw(number)
Als ich mir die Kommentare ansah, die ich erhalten hatte, schwoll das Bild an und ich erstellte eine Funktionstabellenversion. Ich weiß nicht, ob es leicht zu lesen ist, aber ich mag es.
import turtle
convert_func_table = [lambda x: 1.0, lambda x:1.0-x/60, lambda x:0, lambda x:0, lambda x:x/60, lambda x:1.0]
def convert(i,fine):
return convert_func_table[i%6](fine)
def color2rgb(color):
i, fine = divmod(color, 60)
return (
convert(i, fine),
convert(i+4, fine),
convert(i+2, fine),
)
def draw(number):
turtle.delay(5)
turtle.shape("turtle")
for i in range(number):
color = int(360/number*i)
turtle.pencolor(color2rgb(color))
turtle.circle(100)
turtle.left(360/number)
turtle.done()
number = int(input("Wie viele Kreise zeichnen Sie?"))
draw(number)
Vielen Dank an K für die Bereitstellung des Programms.
Recommended Posts