Přeskočit na obsah

Python/Kenjiro995/podmínky while

Z Wikiverzity

Základní

[editovat]

Cyklus s podmínkou je while loops a používá se všude tam, kde není jasné kolik cyků přesně bude. Například program běží (opakuje se) tak dlouho, dokud není zadán příkaz k ukončení smyčky (programu). Cyklus lze využít i způsobem jako for a tak je while nejuniverzálnější formou cyklu. Výchozí hodnotu případného počítadla je vhodné nastavit ještě před cyklem.

Cyklus se provádí tak dlouho dokud platí podmínka.


i = 1
while i < 6:
  print(i)
  i += 1

Výstup:

1
2
3
4
5


i = 1
while i < 6:
  print(i)
  if i == 3:
    break #příkaz ukončuje smyčku (cyklus) ještě před splněním podmínky
  i += 1

Výstup:

1
2
3


i = 0
while i < 6:
  i += 1
  if i == 3:
    continue  #příkaz nařizuje pokračovat
  print(i)

Výstup:

1
2
4
5
6


Cyklus while lze doplnit blokem esle, který se vykoná, pokud podmínka cyklu již není pravdivá:

i = 1
while i < 6:
  print(i)
  i += 1
else:
  print("i is no longer less than 6")

Výstup:

1
2
3
4
5
i is no longer less than 6


Odpočet:

n = 5
while n > 0:
  n -= 1  #to samé jako n = n - 1
  print(n)

Výstup:

4
3
2
1
0


Odebírání položek z listu:

a = ['foo', 'bar', 'baz']
while a:
  print(a.pop(-1))  #odebere položku od konce a vrátí ji (vypíše)

print(a) #list je již prázdný, všechny položky už byli pomocí a.pop(-1) odebrány

Výstup:

baz
bar
foo
[]


Součet posloupnosti (součet deseti čísel n = 10):

n = 10
sum = 0
i = 1

while i <= n:
    sum = sum + i
    i = i+1    

print("Součet čísel je", sum)

Výstup:

Součet čísel je 55

Praktické využití pro pokročilé

[editovat]

Výpočet průměru zadaného scóre

[editovat]

Cmyčka while se zde využívá o opakovanému zadávání scóre, protože není dopředu známo, kolik potřebuje uživatel zadat hodnot, neboť se to může situace od situace měnit. Dále ji využívá k ukončení zadávání a vypsání průměru. Nakonec while využívá k ukončení programu, nebo k rozhodnutí zadávat hodnoty znovu od začátku.

Program také převádí vstupy příkazů na malá písmena pomocí funkce lower() nebo naopak převádí vše do velkých upper(), takže je jedno jestli uživatel zadá "yes" nebo "YES", "done" nebo "DONE" atd. Protože se hodnoty převádí jedním nebo druhým způsobem, takže je převede na malá písmena ať už jsou velká nebo ne, nebo je převede na velká písmena ať už jsou velká nebo malá. Právě díky tomuto sjednocujícímu prvku ("měřit všem stejně"), potom nezáleží na velikosti písmen při zadávání, ať už while testuje jedním či druhým způsobem. Program tak pochopí zadání ať už je "no", "NO" nebo "No". Pokud podmínka testuje velká písmena "DONE" pak vše převádí na velká písmena upper(), tedy newScore.upper() == 'DONE'. A pokud testuje malá písmena "yes" pak vše převádí na malá písmena lower(), tedy initialDecision.lower() == 'yes'.

status = 'exit'
print('SCORE AVERAGING SYSTEM\n\n')
initialDecision = input('Enter YES to begin or NO to exit\n')
if initialDecision.lower() == 'yes':
   status = 'Run'
while status == 'Run':
   print('SCORE AVERAGING SYSTEM\n\n')
   # Allow user to enter scores
   scores = 0
   scoreCount = 0
   exit = 'No'
   while exit == 'No':
       newScore = input('Enter a score or DONE\n')
       if newScore.isdigit():
           newScore = int(newScore)
           if newScore >= 0:
               scores = scores + newScore
               scoreCount = scoreCount + 1
       elif str(newScore.upper()) == 'DONE':
           if scoreCount <= 0:
               print('No scores to average.')
           else:
               average = scores/scoreCount
               print('========== begin results ==========')
               print(' Average of ', scoreCount, ' scores is ', '%.2f' % average)
               print('=========== end results ===========\n\n')
           exit = 'Yes'
       else:
           print('Invalid input. Please try again.')
   # Allow user to continue or exit
   decision = 'unknown'
   while decision == 'unknown':
       newStatus = input('Enter YES to continue or NO to exit:\n')
       if newStatus.lower() == 'yes':
           status = 'Run'
           decision = 'known'
       elif newStatus.lower() == 'no':
           status = 'Stop'
           decision = 'known'
       else:
           print('Invalid input. Please try again.\n')
print('end of program reached')

Výstup:

SCORE AVERAGING SYSTEM


Enter YES to begin or NO to exit
yes
SCORE AVERAGING SYSTEM


Enter a score or DONE
100
Enter a score or DONE
5
Enter a score or DONE
56
Enter a score or DONE
done
========== begin results ==========
 Average of  3  scores is  53.67
=========== end results ===========


Enter YES to continue or NO to exit:
no
end of program reached