Ahoj, potřeboval bych pomoct s tímto porogramem. Jedná se o podprogram s proměnnou, který vykreslí v jeskyni krápníky, které budou s určitou délkou zrcadlově proti sobě. Dneska večer to mám odevzdat a nevím si s tím rady.
Děkuju moc za pomoc.
Ahoj, potřeboval bych pomoct s tímto porogramem. Jedná se o podprogram s proměnnou, který vykreslí v jeskyni krápníky, které budou s určitou délkou zrcadlově proti sobě. Dneska večer to mám odevzdat a nevím si s tím rady.
Děkuju moc za pomoc.
Asi nejlepší by bylo si udělat podprogram krapniky a jet nejak takto:
def krapniky:
canvas.create_line( tady nějak souřadnice ale vůbec nevím jak, width = 1, a délka má být od 20 do 70 a nevím kam to mám napsat)
Měl bych napsat délku jako zvlášť proměnnou, kterou potom vložím do podprogramu?
Souřadnice jsou 0,0 vlevo nahoře a rostou směrem doprava a dolů. Tak je zadáš tak, jak je chceš mít a uděláš ty čáry dvě. Na vygenerování té delky můžeš použít třeba metodu randint z modulu random.
nevím kam to mám napsat
Jakpak je to možné?
def nakresli_dvojici_krapniku(canvas, x, delka, y_strop, y_podlaha):
x1, y1 = x, y_strop
x2, y2 = x, y_strop + delka
canvas.create_line(x1, y1, x2, y2, fill="green")
x1, y1 = x, y_podlaha - delka
x2, y2 = x, y_podlaha
canvas.create_line(x1, y1, x2, y2, fill="blue")
# ...
delka = random.randint(20, 70)
nakresli_dvojici_krapniku(canvas, x, delka, 10, 390)
#10 gna
Ahoj, díky moc. Můžu se zeptat, co znamená ten canvas v těch souřadnicích? Když si zadefinuji x = 10, tak mi to nakreslí pouze jednu čáru.
_ _ _ _ _ _
|_|_|_|_|_|_|
|_|_|_|_|_|_|
|_|_|_|_|_|_|
A jak bys kreslil kralniky do tabulky?
Cyklus pro x = 0 az 5
Cyklus pro y = 0 az random(3)
vybarvi puntik (x,y, cerna)
Jenom, to vybarveni musis provest na canvas (coz je pojmenovani x-y mrizky pro funkce sobrazky) a canvas pak zobrazit na obrazovku.
import tkinter
canvas = tkinter.Canvas(height = 500, width = 700)
canvas.pack()
import random
x = 10
def nakresli_dvojici_krapniku(canvas ,x, delka, y_strop, y_podlaha):
x1, y1 = x, y_strop
x2, y2 = x, y_strop + delka
canvas.create_line(x1, y1, x2, y2, fill="green")
x1, y1 = x, y_podlaha - delka
x2, y2 = x, y_podlaha
canvas.create_line(x1, y1, x2, y2, fill="green")
for i in range(50):
delka = random.randint(20, 70)
nakresli_dvojici_krapniku(canvas ,x, delka, 10, 390)
Tak jsem dosadil Canvas a dal jsem je to do for cyklu, ale stále se mi nakreslí pouze jenom dvě čáry místo mých 50 o náhodné délce
import tkinter #importuji knihovnu tkinter
canvas = tkinter.Canvas(height = 400, width = 700) #určím si velikost plátna
canvas.pack()
import random #vložím knihovnu random, pro další náhodné výběry
x = 10
def nakresli_dvojici_krapniku(canvas ,x, delka, y_strop, y_podlaha): #zadefinoval jsem si funkci, která mi vytvoří krápníky zradlově naproti sobě pomocí svých proměnných souřadnic (strop a podlaha)
x1, y1 = x, y_strop
x2, y2 = x, y_strop + delka #proměnné x,y strop a podlaha jsem si vytvořil, abych získal zrcadlové vyobrazení krápníků. Pomocí nich jsem si takto sjednal jejich uspořádání na protějších stranách (určil jsem si kde mi budou souřadnice krápníků začínat a končit)
canvas.create_line(x1, y1, x2, y2, fill="green")
x1, y1 = x, y_podlaha - delka
x2, y2 = x, y_podlaha
canvas.create_line(x1, y1, x2, y2, fill="green")
for x in range(1000): #ve for cyklu jsem si dal počet, kolikrát chci, aby se mi krápníky nakreslily v řadě za sebou
delka = random.randint(20, 70) #určil jsem si interval, který mi vybere náhodnou délku pro krápník mezi 20 - 70
nakresli_dvojici_krapniku(canvas ,x, delka, 10, 390) #ještě jsem si dosadil funkci canvas, která mi dosadí parametr mého stanoveného plátna, na který má kreslit
pocet = random.randint(10,20) #zde jsem si urči proměnnou pocet, který bude náhodný od 10 do 20, který jsem poté použil ve for cyklu
for i in range(pocet):
x = random.randint(10, 1000)
#z náhodného počtu z intervalu se mi na náhodném místě nakreslí louže a náhodných souřadnicích, které jsem si určil
y = random.randint(10, 1000)
if (x>=80)and(y<=700): #nastavil jsem si podmínku souřadnic pro louže, které se mi nebudou dotíkat žádných z krápníků
x3 = random.randint(100,250)
y3 = random.randint(100,150)
x_polomer = random.randint(70,100)
#pro x a y jsem si udělal náhodný poloměr dle zadání od 70 do 100
y_polomer = random.randint(70,100)
canvas.create_oval(x3,y3,x_polomer+x3,y_polomer+y3, fill='blue') #louže se mi nakreslila
Dává to takhle smysl, jak jsem to napsal?
Zkuste si to klidně zpustit, mělo by to fungovat
import tkinter #importuji knihovnu tkinter
canvas = tkinter.Canvas(height = 400, width = 700) #určím si velikost plátna
canvas.pack()
import random #vložím knihovnu random, pro další náhodné výběry
#KRÁPNÍKY:
x = 10
def nakresli_dvojici_krapniku(canvas ,x, delka, y_strop, y_podlaha): #zadefinoval jsem si funkci, která mi vytvoří krápníky zradlově naproti sobě pomocí svých proměnných souřadnic (strop a podlaha)
x1, y1 = x, y_strop
x2, y2 = x, y_strop + delka #proměnné x,y strop a podlaha jsem si vytvořil, abych získal zrcadlové vyobrazení krápníků. Pomocí nich jsem si takto sjednal jejich uspořádání na protějších stranách (určil jsem si kde mi budou souřadnice krápníků začínat a končit)
canvas.create_line(x1, y1, x2, y2, fill="green")
x1, y1 = x, y_podlaha - delka
x2, y2 = x, y_podlaha
canvas.create_line(x1, y1, x2, y2, fill="green")
for x in range(1000): #ve for cyklu jsem si dal počet, kolikrát chci, aby se mi krápníky nakreslily v řadě za sebou
delka = random.randint(20, 70) #určil jsem si interval, který mi vybere náhodnou délku pro krápník mezi 20 - 70
nakresli_dvojici_krapniku(canvas ,x, delka, 10, 390) #ještě jsem si dosadil funkci canvas, která mi dosadí parametr mého stanoveného plátna, na který má kreslit
#LOUŽE:
pocet = random.randint(10,20) #zde jsem si urči proměnnou pocet, který bude náhodný od 10 do 20, který jsem poté použil ve for cyklu
for i in range(pocet):
x = random.randint(10, 1000)
#z náhodného počtu z intervalu se mi na náhodném místě nakreslí louže a náhodných souřadnicích, které jsem si určil
y = random.randint(10, 1000)
if (x>=400)and(y<=700): #nastavil jsem si podmínku souřadnic pro louže, které se mi nebudou dotíkat žádných z krápníků
x3 = random.randint(100,250)
y3 = random.randint(100,150)
x_polomer = random.randint(20,100)
#pro x a y jsem si udělal náhodný poloměr dle zadání od 70 do 100
y_polomer = random.randint(20,100)
canvas.create_oval(x3,y3,x_polomer+x3,y_polomer+y3, fill='blue') #louže se mi nakreslily
FINÁLNÍ VÝSLEDEK ČÁST I
canvas.create_line(0,150,700,150,fill='brown', width = 3)
#vytvořím si dvě čáry, které budou pod sebou mezi krápníkama
canvas.create_line(0,220,700,220,fill='brown', width = 3)
a = 150 #proměnná pro horní dřívko žebříku
b = 220 #proměnná pro dolní dřívko žebříku
c = 70 #proměnná pro schůdek žebříku
for i in range(10):
canvas.create_line(c,a,c,b,fill = 'brown', width =3)#*
c=c+70
Část II
Netuším, co u těch louží znamená ta hodnota 1000 a proč pak ty hodnoty testuješ místo abys ten interval rovnou definoval, jak ho chceš mít.
Jestli správně chápu, co chceš tím větším rozestupem louží, tak na to můžeš použít funci randrange(od, do, krok). Stejné parametry má i funkce range a můžeš je využít při kreslení příček toho žebříku.
A když je to program na podprogramy/funkce, tak je trochu k ničemu funkcí řešit jen jednu věc.
import random
import tkinter
def nakresli_dvojici_krapniku(canvas, x, delka, y_strop, y_podlaha):
x1, y1 = x, y_strop
x2, y2 = x, y_strop + delka
canvas.create_line(x1, y1, x2, y2, fill="green")
x1, y1 = x, y_podlaha - delka
x2, y2 = x, y_podlaha
canvas.create_line(x1, y1, x2, y2, fill="green")
def nakresli_louzi(canvas, x, y, sirka, vyska):
vlevo, vpravo = x, x + sirka
nahore, dole = y, y + vyska
canvas.create_oval(vlevo, nahore, vpravo, dole, fill="blue")
def nakresli_zebrik(canvas, x, y, sirka, vyska, rozestup):
vlevo, vpravo = x, x + sirka
nahore, dole = y, y + vyska
canvas.create_line(vlevo, nahore, vpravo, nahore, fill="brown", width=3)
canvas.create_line(vlevo, dole, vpravo, dole, fill="brown", width=3)
for pricka in range(vlevo + rozestup, vpravo, rozestup):
canvas.create_line(pricka, nahore, pricka, dole, fill="brown", width=3)
# zacatek
canvas_width, canvas_height = 700, 400
canvas = tkinter.Canvas(width=canvas_width, height=canvas_height)
canvas.pack()
# krapniky
for x in range(canvas_width):
delka = random.randint(20, 70)
nakresli_dvojici_krapniku(canvas, x, delka, 0, canvas_height)
# louze
pocet = random.randint(10, 20)
for i in range(pocet):
x = random.randrange(100, canvas_width - 100, 50) # střílím od boku. netuším, jak toto chceš mít
y = random.randrange(100, canvas_height - 100, 50)
sirka = random.randint(20, 100)
vyska = random.randint(20, 100)
nakresli_louzi(canvas, x, y, sirka, vyska)
# zebrik
nakresli_zebrik(canvas, 0, 150, canvas_width, 70, 70)
tkinter.mainloop()
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku