IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Start cyklu while v Pythoně

V předchozím kvízu, Online test znalostí Python 2.7, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Alexandr Saveljev:30.7.2023 15:01

Máme v tutoriálu kód:

x = 0
while True:
    x += 1
    if x >= 50:
        print(f"hodnota x je {x}")
        break

print("Program úspěšně skončil")

Otázkou je - proč cyklus while začíná pracovat?
x = 0 - to je False značení, ne?

Zkusil jsem: Přečetl jsem tutoriály Python.

Chci docílit: Pochopení.

 
Odpovědět
30.7.2023 15:01
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Alexandr Saveljev
DarkCoder:30.7.2023 15:18

V cyklech Tě zajímá výraz v podmínce cyklu, nic jiného. V tomto případě je výraz v podmínce True. Takový cyklus poběží do nekonečna, dokud jej explicitně neukončíme pomocí příkazu break. Proměnná x nikterak nesouvisí s řídící podmínkou cyklu ikdyž je uvnitř cyklu používána.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
30.7.2023 15:18
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Alexandr Saveljev
DarkCoder:30.7.2023 15:38

Celý kód jinak zapsaný může vypadat takto:

x = 1
while x < 50:
    x += 1

print(f"hodnota x je {x}")
print("Program úspěšně skončil")

Při letmém pohledu je samozřejmě ukázkový úryvek kódu zbytečný, neboť se pouze inkrementuje hodnota proměnné do stanovené hodnoty, nic víc. Takový kód lze pak napsat takto:

x = 50
print(f"hodnota x je {x}")
print("Program úspěšně skončil")

Smyslem dotazu je ale spuštění cyklu na základě pravdivé podmínky. Výraz v podmínce je to, co způsobuje to zda cyklus poběží či nikoli.

Nahoru Odpovědět
30.7.2023 15:38
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Alexandr Saveljev:30.7.2023 16:27

Ohledně: "V cyklech Tě zajímá výraz v podmínce cyklu, nic jiného. "
Podívej se prosím Lekce 6 Cykly v Pythonu. Máme tam kód:

print("Vítejte v kalkulačce")
pokracovat= "ano"
while (pokracovat== "ano"):
    a = float(input("Zadejte první číslo: "))
    b = float(input("Zadejte druhé číslo: "))
    print("Vyberte jednu z požadovaných operací:")
    print("1 - sčítání")
    print("2 - odčítání")
    print("3 - násobení")
    print("4 - dělení")
    operace = int(input(""))

    if (operace == 1):
        vysledek = a + b
................ i tak dál.

Mě je dost těžké pochopit jak mohu rozumět ten while True:
V kódu výše je všechno jasně - tam je deklarovana podmínka `pokracovat= "ano" ` ,
a pak, na je základě, se prodložuje kód

while (pokracovat== "ano"):

který se skončí znovu polem input

pokracovat= input("Přejete si zadat další příklad? [ano/ne]: ")

Tj. tady je jasně CO se spouští, CO dává cyklu příkaz START a cyklus while začíná pracovat.
Musím řict, že while True: je dost těžké pochopit jako příkaz START.

 
Nahoru Odpovědět
30.7.2023 16:27
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Alexandr Saveljev
DarkCoder:30.7.2023 17:05

Nehledej v tom nic složitého. Znovu, zajímá Tě pouze výraz v podmínce a to zda je pravdivý či nikoli. Pokud bude pravdivý, cyklus proběhne, pokud ne, řízení programu přejde do části za cyklem.

Pravdivá hodnota je jakákoli nenulová:

while True:
    print("Toto je nekonečný cyklus s pravdivou podmínkou 'True'")
    # Pro ukončení cyklu je třeba použít 'break' nebo jiný mechanismus
while 1:
    print("Toto je nekonečný cyklus s pravdivou podmínkou '1'")
    # Pro ukončení cyklu je třeba použít 'break' nebo jiný mechanismus
while -100:
    print("Toto je nekonečný cyklus s pravdivou podmínkou '-100'")
    # Pro ukončení cyklu je třeba použít 'break' nebo jiný mechanismus
while 1 + 5:
    print("Toto je nekonečný cyklus s pravdivou podmínkou '1+5'")
    # Pro ukončení cyklu je třeba použít 'break' nebo jiný mechanismus
x = 10
while x:
    print(f"Toto je cyklus, který poběží, dokud je x={x} nenulové")
    x -= 1
x = 10
while x < 100:
    print(f"Hodnota x je {x} a cyklus bude pokračovat, dokud x<100")
    x += 10
text = "Hello"
while len(text) > 0:
    print(f"Zbývá {len(text)} znaků: {text}")
    text = text[:-1]
x = 0
while x == 0:
    print("Toto je cyklus s nulovou podmínkou 'x == 0'")
    x += 1

atd.

A naopak, cyklus se přeskočí když výraz v podmínce bude nulový

flag = False
while flag:
    print("Toto je cyklus s nulovou podmínkou 'flag'")
x = 0
while x:
    print("Toto je cyklus s nulovou podmínkou 'x == 0'")
    x += 1
x = 10
while False:
    print("Toto je cyklus s nulovou podmínkou 'x == 10'")
    x += 1
x = 10
while 0:
    print("Toto je cyklus s nulovou podmínkou 'x == 10'")
    x += 1
x = 10
while x == 0:
    print("Toto je cyklus s nulovou podmínkou 'x == 0'")
    x += 1

atd.

Dívej se pouze na podmínky cyklu. Obsahuje-li proměnnou, podívej, co je uvnitř proměnné. Pokud obsahuje prostý výraz (-100, False), stačí určit zda je tento výraz True. True nebo False je rovněž výraz, Výsledkem výrazu je True nebo False... Na základě výrazu se cyklus spustí nebo bude pokračovat, platí-li podmínka (výraz bude True). Přeskočí se, nebude-li podmínka platit (výraz bude False).

Nahoru Odpovědět
30.7.2023 17:05
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Alexandr Saveljev:31.7.2023 15:15

Velmi dobře. Tuto tabulku je nejlepší přidat do lekce pro booleovské výrazy. To umožňuje lepší pochopení materiálu.
Ale mám otázku, chtěl bych jen upřesnit:

x = 10
while False:
    print("Toto je cyklus s nulovou podmínkou 'x == 10'")
    x += 1

Nulová podmínka tady je False, ne?
A to samé zde:

x = 10
while 0:
    print("Toto je cyklus s nulovou podmínkou 'x == 10'")
    x += 1

Nulová podmínka tady je 0, ne?

 
Nahoru Odpovědět
31.7.2023 15:15
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Alexandr Saveljev
DarkCoder:31.7.2023 15:29

Příklady jsou namátkově vymyšlené a nejsou kompletní, ale pro pochopení to postačí.

Ano, u prvního úryvku kódu je výraz False a u druhého 0. Text uvnitř print je zavádějící. Smyslem bylo poukázat na to že ani u jednoho z úryvků kódu se neprovede cyklus while.

Nahoru Odpovědět
31.7.2023 15:29
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Alexandr Saveljev:31.7.2023 20:00

Děkuji!

 
Nahoru Odpovědět
31.7.2023 20:00
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.