Podprogramy s proměnnou – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Podprogramy s proměnnou – Python – Fórum – Programujte.comPodprogramy s proměnnou – Python – Fórum – Programujte.com

 

Nevia
~ Anonymní uživatel
12 příspěvků
26. 3. 2022   #1
-
0
-

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.

Připojen obrázek.

Nahlásit jako SPAM
IP: 77.240.96.–
gna
~ Anonymní uživatel
1698 příspěvků
26. 3. 2022   #2
-
0
-

S čím konkrétně si nevíš rady?

Nahlásit jako SPAM
IP: 213.211.51.–
Jerry
~ Anonymní uživatel
489 příspěvků
27. 3. 2022   #3
-
0
-

kdy že to máš odevzdat ? dneska večer nebo včera večer ?

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:8e9:fec7:d308:c4a6...–
Nevia
~ Anonymní uživatel
12 příspěvků
27. 3. 2022   #4
-
0
-

#3 Jerry
Ahoj, dneska večer 

Nahlásit jako SPAM
IP: 77.240.96.–
Nevia
~ Anonymní uživatel
12 příspěvků
27. 3. 2022   #5
-
0
-

#2 gna
Nevím, jak mám naprogramovat podprogram, který mi udělá ty krápníky ve stejné výšce (řekněme 10) a zrcadlově

Nahlásit jako SPAM
IP: 77.240.96.–
gna
~ Anonymní uživatel
1698 příspěvků
27. 3. 2022   #6
-
0
-

Tak vygeneruješ tu délku krápniku od 20 do 70 a pak stejně dlouhou čáru nakreslíš na obě strany.

Něco ve stylu nahoře od 0 do délkakrápníku a pak dole od výškaplátna-délkakrápníku do výškaplátna.

Nahlásit jako SPAM
IP: 213.211.51.–
Nevia
~ Anonymní uživatel
12 příspěvků
27. 3. 2022   #7
-
0
-

#6 gna
Je mi fakt líto, ale netuším, jak to mám udělat. Už to zkouším přes dvě hodiny a vůbec se mi nedaří. Nevíte někdo, jak by to mělo fungovat? Protože mně set to povedlo udělat na jedné straně, ale ne zrcadlově a hlavně ne náhodně...  :-(

Nahlásit jako SPAM
IP: 77.240.96.–
Nevia
~ Anonymní uživatel
12 příspěvků
27. 3. 2022   #8
-
0
-

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? 

Nahlásit jako SPAM
IP: 77.240.96.–
gna
~ Anonymní uživatel
1698 příspěvků
27. 3. 2022   #9
-
0
-

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é?

Nahlásit jako SPAM
IP: 213.211.51.–
gna
~ Anonymní uživatel
1698 příspěvků
27. 3. 2022   #10
-
0
-

   

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)
Nahlásit jako SPAM
IP: 213.211.51.–
Nevia
~ Anonymní uživatel
12 příspěvků
27. 3. 2022   #11
-
0
-

#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. 

Připojen obrázek.

Nahlásit jako SPAM
IP: 77.240.96.–
gna
~ Anonymní uživatel
1698 příspěvků
27. 3. 2022   #12
-
0
-

Ta funkce prostě dostává nějaké parametry. Jeden z nich je canvas, na který má kreslit.

Obě čáry uvidíš, když parametr pro pozici podlahy upravíš tak, aby odpovídal tomu, jak velký máš canvas.

Nahlásit jako SPAM
IP: 213.211.51.–
Nevia
~ Anonymní uživatel
12 příspěvků
27. 3. 2022   #13
-
0
-

#12 gna
Takže když si dám šířku 500 a výšku 250, tak tam to canvas má nechat, nebo vložit co jsem si dosadil do canvasu?

Nahlásit jako SPAM
IP: 77.240.96.–
gna
~ Anonymní uživatel
1698 příspěvků
27. 3. 2022   #14
-
0
-

Ta funkce jen nakreslí dvě čáry. Když si ji přečteš, tak přece musíš hned vidět význam těch parametru.

Nahlásit jako SPAM
IP: 213.211.51.–
peter
~ Anonymní uživatel
3833 příspěvků
28. 3. 2022   #15
-
0
-

   

 _ _ _ _ _ _ 
|_|_|_|_|_|_|
|_|_|_|_|_|_|
|_|_|_|_|_|_|

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.

Nahlásit jako SPAM
IP: 2001:718:2601:258:5b1:4a21:f88d:b089...–
Nevia
~ Anonymní uživatel
12 příspěvků
28. 3. 2022   #16
-
0
-

   

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

Nahlásit jako SPAM
IP: 77.240.96.–
gna
~ Anonymní uživatel
1698 příspěvků
28. 3. 2022   #17
-
0
-

   

for x in range(50):
    ^
Nahlásit jako SPAM
IP: 213.211.51.–
Nevia
~ Anonymní uživatel
12 příspěvků
28. 3. 2022   #18
-
0
-

   

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

Nahlásit jako SPAM
IP: 77.240.96.–
Nevia
~ Anonymní uživatel
12 příspěvků
28. 3. 2022   #19
-
0
-

Mohu se zeptat, jak byste upravili ty modrá kolečka, aby byly dále od sebe?

Nahlásit jako SPAM
IP: 77.240.96.–
Nevia
~ Anonymní uživatel
12 příspěvků
28. 3. 2022   #20
-
0
-

   

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

Nahlásit jako SPAM
IP: 77.240.96.–
Nevia
~ Anonymní uživatel
12 příspěvků
28. 3. 2022   #21
-
0
-

   

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

Nahlásit jako SPAM
IP: 77.240.96.–
gna
~ Anonymní uživatel
1698 příspěvků
29. 3. 2022   #22
-
0
-

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()
Nahlásit jako SPAM
IP: 213.211.51.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032022 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý