owned this note
owned this note
Published
Linked with GitHub
---
title: Тема 6. Циклы с проверкой условий
tags: Python Step
type: slide
slideOptions:
allottedMinutes: 80
slideNumber: c
theme: beige
transition: slide
spotlight:
enabled: true
---
## ++Тема 6++<br>Циклы с проверкой условий
(c) Яценко Р.Н., 2019-2020
---
## 1. Цикл while
----
### Цикл while (“пока”)
- Цикл `while` (“пока”) позволяет выполнить одну и ту же последовательность действий, пока проверяемое условие истинно
- Условие записывается до тела цикла и проверяется до выполнения тела цикла
- Как правило, цикл `while` используется, когда невозможно определить точное значение количества проходов исполнения цикла
----
### Синтаксис цикла while
```python
while условие:
тело цикла
[else:
операторы по завершению цикла]
```
----
### Порядок выполнения
- При выполнении цикла `while` сначала проверяется условие
- Если оно ложно, то выполнение цикла прекращается и управление передается на следующую команду после тела цикла `while`
- Если условие истинно, то выполняется тело цикла
- Так продолжается до тех пор, пока условие будет истинно
- Как только условие станет ложно, работа цикла завершится
----
### Пример 1. Квадраты чисел<br>от 1 до 10
```python=
i = 1
while i <= 10:
print(i ** 2)
i += 1
```
----
### Пример 1. Выполнение
<iframe frameborder="0" src="http://pythontutor.com/iframe-embed.html#code=i%20%3D%201%0Awhile%20i%20%3C%3D%2010%3A%0A%20%20%20%20print%28i%20**%202%29%0A%20%20%20%20i%20%2B%3D%201&codeDivHeight=400&codeDivWidth=350&cumulative=false&curInstr=0&heapPrimitives=nevernest&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false" style="width: 100%; height: 50vh; transform: scale(1.1);"> </iframe>
----
### Пример 2. Определение количества цифр числа n
```python=
n = 567
length = 0
while n > 0:
n //= 10 # это эквивалентно n = n // 10
length += 1
print(length)
```
----
### Пример 2. Выполнение
<iframe frameborder="0" src="http://pythontutor.com/iframe-embed.html#code=n%20%3D%20567%0Alength%20%3D%200%0Awhile%20n%20%3E%200%3A%0A%20%20%20%20n%20//%3D%2010%20%20%23%20%D1%8D%D1%82%D0%BE%20%D1%8D%D0%BA%D0%B2%D0%B8%D0%B2%D0%B0%D0%BB%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%20n%20%3D%20n%20//%2010%0A%20%20%20%20length%20%2B%3D%201%0Aprint%28length%29&codeDivHeight=400&codeDivWidth=350&cumulative=false&curInstr=0&heapPrimitives=nevernest&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false" style="width: 100%; height: 50vh; transform: scale(1.1);"> </iframe>
---
## 2. Операторы управления циклом
----
### Блок else
- После тела цикла можно написать слово `else:` и после него блок операций, который будет выполнен один раз после окончания цикла, когда проверяемое условие станет неверно
```python=
i = 1
while i <= 5:
print(i)
i += 1
else:
print('Цикл окончен, i =', i)
```
----
### Оператор break
- Если во время выполнения Python встречает оператор `break` внутри цикла, то он сразу же прекращает выполнение этого цикла и выходит из него
- При этом ветка `else` исполняться не будет
- Оператор `break` лучше вызывать только внутри оператора `if`, то есть он должен выполняться только при выполнении какого-то особенного условия
----
### Пример 3
Программа считывает числа до тех пор, пока не встретит отрицательное число
```python=
a = int(input())
while a != 0:
if a < 0:
print('Встретилось отрицательное число', a)
break
a = int(input())
else:
print('Ни одного отрицательного числа не встретилось')
```
----
### Пример 4. С циклом for
```python=
n = int(input())
for i in range(n):
a = int(input())
if a < 0:
print('Встретилось отрицательное число', a)
break
else:
print('Ни одного отрицательного числа не встретилось')
```
----
### Оператор continue
- Если оператор `continue` встречается где-то посередине цикла, то пропускаются все оставшиеся операторы до конца цикла, и исполнение цикла продолжается со следующей итерации
- Если операторы `break` и `continue` содержатся внутри нескольких вложенных циклов, то они влияют лишь на исполнение самого внутреннего цикла
----
### Пример 5. Неудачное использование break
```python=
for i in range(3):
for j in range(5):
if j > i:
break
print(i, j)
```
----
### Пример 5. Без break
```python=
for i in range(3):
j = 0
while j <= i:
print(i, j)
j += 1
```
----
### Пример 5. Выполнение
<iframe frameborder="0" src="http://pythontutor.com/iframe-embed.html#code=for%20i%20in%20range%283%29%3A%0A%20%20%20%20j%20%3D%200%0A%20%20%20%20while%20j%20%3C%3D%20i%3A%0A%20%20%20%20%20%20%20%20print%28i,%20j%29%0A%20%20%20%20%20%20%20%20j%20%2B%3D%201&codeDivHeight=400&codeDivWidth=350&cumulative=false&curInstr=0&heapPrimitives=nevernest&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false" style="width: 100%; height: 50vh; transform: scale(1.1);"> </iframe>
---
## 3. Множественное присваивание
----
### Множественное присваивание
В Питоне можно за одну инструкцию присваивания изменять значение сразу нескольких переменных
```python
a = 0
b = 1
# А можно в одну строку
a, b = 0, 1
```
----
### Пример 6. Обмен значениями двух переменных
```python=
a = 1
b = 2
a, b = b, a
print(a, b)
```
```
2 1
```
----
### Пример 7
Алгоритм Евклида нахождения наибольшего общего делителя (НОД)
```python=
a = int(input())
b = int(input())
while b != 0:
c = a % b
a, b = b, c
print('НОД =', a)
```
----
### Пример 7. Выполнение
<iframe frameborder="0" src="http://pythontutor.com/iframe-embed.html#code=a%20%3D%20int%28input%28%29%29%0Ab%20%3D%20int%28input%28%29%29%0Awhile%20b%20!%3D%200%3A%0A%20%20%20%20c%20%3D%20a%20%25%20b%0A%20%20%20%20a,%20b%20%3D%20b,%20c%0Aprint%28'%D0%9D%D0%9E%D0%94%20%3D',%20a%29&codeDivHeight=400&codeDivWidth=350&cumulative=false&curInstr=0&heapPrimitives=nevernest&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false" style="width: 100%; height: 50vh; transform: scale(1.1);"> </iframe>
---
## 4. Игра "Отгадай число"
----
### Правила игры
- Компьютер выбирает случайное число в диапазоне от 1 до 100
- Игрок пытается отгадать это число, и компьютер сообщает предположение больше/меньше, чем загаданное число или попало в точку
----
### Пример 8
Игра "Отгадай число"
```python=
import random
# Правила игры
print("Добро пожаловать в игру 'Отгадай число'!\n")
print("Я загадал натуральное число в диапазоне от 1 до 100")
print("Постарайтесь отгадать его за минимальное число попыток\n")
# начальные значения
the_number = random.randint(1, 100)
guess = int(input("Ваше предположение: "))
tries = 1
```
----
```python=13
# цикл отгадывания
while guess != the_number:
if guess > the_number:
print("Меньше...")
else:
print("Больше...")
guess = int(input("Ваше предположение: "))
tries += 1
# Вывод результатов
print("Вам удалось отгадать число! Это в самом деле",
the_number)
print("Вы затратили на отгадывание всего лишь",
tries, "попыток!")
```
----
### Сыграем ?
<iframe frameborder="0" src="http://pythontutor.com/iframe-embed.html#code=import%20random%0A%0Aprint%28%22%D0%94%D0%BE%D0%B1%D1%80%D0%BE%20%D0%BF%D0%BE%D0%B6%D0%B0%D0%BB%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%B2%20%D0%B8%D0%B3%D1%80%D1%83%20'%D0%9E%D1%82%D0%B3%D0%B0%D0%B4%D0%B0%D0%B9%20%D1%87%D0%B8%D1%81%D0%BB%D0%BE'!%5Cn%22%29%0Aprint%28%22%D0%AF%20%D0%B7%D0%B0%D0%B3%D0%B0%D0%B4%D0%B0%D0%BB%20%D0%BD%D0%B0%D1%82%D1%83%D1%80%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5%20%D1%87%D0%B8%D1%81%D0%BB%D0%BE%20%D0%B2%20%D0%B4%D0%B8%D0%B0%D0%BF%D0%B0%D0%B7%D0%BE%D0%BD%D0%B5%20%D0%BE%D1%82%201%20%D0%B4%D0%BE%20100%22%29%0Aprint%28%22%D0%9F%D0%BE%D1%81%D1%82%D0%B0%D1%80%D0%B0%D0%B9%D1%82%D0%B5%D1%81%D1%8C%20%D0%BE%D1%82%D0%B3%D0%B0%D0%B4%D0%B0%D1%82%D1%8C%20%D0%B5%D0%B3%D0%BE%20%D0%B7%D0%B0%20%D0%BC%D0%B8%D0%BD%D0%B8%D0%BC%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B5%20%D1%87%D0%B8%D1%81%D0%BB%D0%BE%20%D0%BF%D0%BE%D0%BF%D1%8B%D1%82%D0%BE%D0%BA%5Cn%22%29%0A%0A%23%20%D0%BD%D0%B0%D1%87%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8F%0Athe_number%20%3D%20random.randint%281,%20100%29%0Aguess%20%3D%20int%28input%28%22%D0%92%D0%B0%D1%88%D0%B5%20%D0%BF%D1%80%D0%B5%D0%B4%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5%3A%20%22%29%29%0Atries%20%3D%201%0A%0A%23%20%D1%86%D0%B8%D0%BA%D0%BB%20%D0%BE%D1%82%D0%B3%D0%B0%D0%B4%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%0Awhile%20guess%20!%3D%20the_number%3A%0A%20%20%20%20if%20guess%20%3E%20the_number%3A%0A%20%20%20%20%20%20%20%20print%28%22%D0%9C%D0%B5%D0%BD%D1%8C%D1%88%D0%B5...%22%29%0A%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20print%28%22%D0%91%D0%BE%D0%BB%D1%8C%D1%88%D0%B5...%22%29%0A%20%20%20%20guess%20%3D%20int%28input%28%22%D0%92%D0%B0%D1%88%D0%B5%20%D0%BF%D1%80%D0%B5%D0%B4%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5%3A%20%22%29%29%0A%20%20%20%20tries%20%2B%3D%201%0A%0A%23%20%D0%92%D1%8B%D0%B2%D0%BE%D0%B4%20%D1%80%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82%D0%BE%D0%B2%0Aprint%28%22%D0%92%D0%B0%D0%BC%20%D1%83%D0%B4%D0%B0%D0%BB%D0%BE%D1%81%D1%8C%20%D0%BE%D1%82%D0%B3%D0%B0%D0%B4%D0%B0%D1%82%D1%8C%20%D1%87%D0%B8%D1%81%D0%BB%D0%BE!%20%20%D0%AD%D1%82%D0%BE%20%D0%B2%20%D1%81%D0%B0%D0%BC%D0%BE%D0%BC%20%D0%B4%D0%B5%D0%BB%D0%B5%22,%20the_number%29%0Aprint%28%22%D0%92%D1%8B%20%D0%B7%D0%B0%D1%82%D1%80%D0%B0%D1%82%D0%B8%D0%BB%D0%B8%20%D0%BD%D0%B0%20%D0%BE%D1%82%D0%B3%D0%B0%D0%B4%D1%8B%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D0%B2%D1%81%D0%B5%D0%B3%D0%BE%20%D0%BB%D0%B8%D1%88%D1%8C%22,%20tries,%20%22%D0%BF%D0%BE%D0%BF%D1%8B%D1%82%D0%BE%D0%BA!%22%29&codeDivHeight=400&codeDivWidth=350&cumulative=false&curInstr=0&heapPrimitives=nevernest&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false" style="width: 100%; height: 50vh; transform: scale(1.1);"> </iframe>
---
## Спасибо за внимание!

(c) Яценко Р.Н., 2019-2020