Hogyan kell pythonban színátmenetet csinálni?
Írj függvényt, amely adott méretű négyzetekből (1. paraméter) és adott számú négyzetből (2. paraméter) rajzol egy ilyen színátmenetet!Baloldalán full zöldből megy át a jobb oldalra full pirosba.
eddig juttottam:
import turtle
def sokszog(oldalszam, oldalhossz):
x = 1
while x <= oldalszam:
turtle.forward(oldalhossz)
turtle.left(360.0/oldalszam)
x += 1
turtle.speed(0)
turtle.up()
turtle.back(300)
turtle.down()
n = input ("Hany darab negyzetbol alljon? ")
hossz = input ("Mekkora legyen a negyzet? ")
y = n
while y != 0:
x = 1
while x <= y:
turtle.color(1.0, 0.0, 0.0)
turtle.begin_fill()
sokszog(4, hossz)
turtle.end_fill()
turtle.color("black")
sokszog(4, hossz)
turtle.forward(hossz)
x = x+1
y = y-1
turtle.mainloop()
Itt a mukodo pelda:
nbviewer.jupyter.org/urls/dl.dropbox (pont) com/s/eui2do7kw6mx0fr/gradient_test.ipynb
Kicsit kellett faragni a fuggvenyemen, mert a fentebb belinkelt verzio a gradiens elemeit olyan rgb formaban adja vissza, amit egy svg grafika kirajzolasahoz hasznaltam. (tobb ezer x tobb ezer meretu negyzetracs, ahol a negyzetek szineit kellett gradienssel szinezni aszerint, hogy milyen az adott mezo erteke. Ha erdkel, mutathatok egy peldat.)
Kicsit gondolkozhattál volna még a szín számításán vagy legalább leírhattad volna hogy próbálod vagy mit tapasztaltál, de Bolondok napja alkalmából tessék:
i = 0
while i < n:
. . turtle.color(i/(n-1), 1-i/(n-1), 0.0)
. . turtle.begin_fill()
. . sokszog(4, hossz)
. . turtle.end_fill()
. . turtle.forward(hossz)
. . i += 1
Egy lényeges megjegyzés: Python2-ben az input() nem ugyan az mint Python3-ban az input(). Python2-ben a raw_input() függvényt használjuk, az felel meg a Python3-ban használt input() függvénnyel. Python2-ben az input() kiértékeli a bemenetet, máshogy viselkedik mint a raw_input() és "veszélyes" a használata.
Cseréld le ezt:
n = input ("Hany darab negyzetbol alljon? ")
hossz = input ("Mekkora legyen a negyzet? ")
Erre:
n = int(raw_input("Hany darab negyzetbol alljon? "))
hossz = int(raw_input("Mekkora legyen a negyzet? "))
Kérdező, a linkelt script sok sebből vérzik: nem állítod át a kitöltés színét! Folytan csak pirosat használsz. Hol van a scriptbe, hogy zöld legyen a végeredmény? Miért rajzolsz két négyzetet egymásra?
Ezzel próbálkozz:
#12 Vagyok, eszembe jutott hogy Python3 kódot küldtem. Python3 a / jel tört osztás, Python2-ben egészek között egész osztást jelöl. Át kell alakítani lebegőpontossá legalább az egyik számot például így:
turtle.color(float(i)/(n-1), 1-float(i)/(n-1), 0.0)
Köszönöm szépen a segítsét :)
Sikerült és működik a programom
Ezer hála
Hát, ebből végül kimaradtam, úgyhogy nem is dobom be a majdnem ugyanilyenemet.
Kérdező, az tetszik az második próbálkozásodban, hogy láthatólag igyekeztél menet közben még tisztogatni is a kódon. Még ennyit hozzátennék:
1. Félretéve, hogy valóban kézenfekvő a for ciklus, a while ciklusban sem csak összeadogatni, hanem kivonni is lehet. Ha már úgyis megkaptad az n értéket, lehet az a ciklusváltozó, másra úgysem használod. Valahogy így:
n = input ("Hany darab negyzetbol alljon? ")
hossz = input ("Mekkora legyen a negyzet? ")
while n > 0:
turtle.color(1.0, 0.0, 0.0)
...
...
n -= 1
2. Nem érzem szerencsésnek, hogy az eljáráson vagy min belül ugyanolyan x nevű változó szerepel, mint a programtörzsben. Ez akkor is bonyodalmakhoz vezethet, ha a fordítót nem zavarja. Kár megszokni, gondold el, hogy egy nagyobb programodban _téged_ mennyire fognak megkavarni az ilyen egyezések.
3. Az inputban egyértelműen négyzetet említesz, tehát az általánosabb célú sokszög helyett elég, ha csak azt rajzolsz:
def negyzet(oldalhossz):
x = 4
while x < 0:
turtle.forward(oldalhossz)
turtle.left(90)
x -= 1
Persze, lehet általános sokszöget is rajzoltatni, de akkor úgy érdekesebb, ha bekéred az oldalak számát is. Szerintem egy
ilyen változatban legyen a következő.
+ A bánatba... Az x léptetése természetesen még a ciklusba való:
def negyzet(oldalhossz):
x = 4
while x < 0:
turtle.forward(oldalhossz)
turtle.left(90)
x -= 1
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!