Un programme Python écrit par un lycéen. C'était bien fait pour la première fois. Au début, vous pouvez utiliser n'importe quel style d'écriture. Je pense.
Cependant, pour pouvoir créer des programmes difficiles, il est important d'organiser votre esprit et de rendre le programme facile à comprendre. J'ai réécrit ce programme à titre d'exemple.
J'ai pu dessiner une belle figure. C'est merveilleux de concevoir un moyen de mettre des nuances colorées. Je l'ai fait en examinant attentivement les conditions de l'instruction if et la formule de calcul.
number = int(input("Combien de cercles dessinez-vous?"))
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()
Résultat d'exécution
importer les mouvements en premier La partie permettant de trouver la valeur RVB est fonctionnalisée Je ne vois pas la régularité de la formule dans l'instruction if. Je pense que cela a été fait par essais et erreurs. Changé en une expression régulière qui donne le même résultat. L'expression conditionnelle de l'instruction if contient =, mais le résultat ne change pas même si = est supprimé. Couleur Étant donné que la plage va de 0 à 359, il semble plus approprié de ne pas ajouter =.
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("Combien de cercles dessinez-vous?"))
draw(number)
Si vous regardez de près color2rgb (), les valeurs de R, V et B ont la même forme avec un déphasage de 120. Vous pouvez également arrêter l'instruction if et créer une table. Mais si vous en faites un tableau, ce sera un peu moins lisible. Faisons cela.
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("Combien de cercles dessinez-vous?"))
draw(number)
En regardant les commentaires que j'ai reçus, l'image a gonflé, alors j'ai fait une version de table de fonction. Je ne sais pas si c'est facile à lire, mais j'aime ça.
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("Combien de cercles dessinez-vous?"))
draw(number)
Merci K d'avoir fourni le programme.
Recommended Posts