## ++Тема 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> --- ## Спасибо за внимание! ![](https://i.imgur.com/gKDsna4.png) (c) Яценко Р.Н., 2019-2020
{"metaMigratedAt":"2023-06-15T14:22:26.161Z","metaMigratedFrom":"YAML","title":"Тема 6. Циклы с проверкой условий","breaks":false,"slideOptions":"{\"allottedMinutes\":80,\"slideNumber\":\"c\",\"theme\":\"beige\",\"transition\":\"slide\",\"spotlight\":{\"enabled\":true}}","contributors":"[{\"id\":\"93a8c43f-1b5b-4461-9101-89b183ccbc1c\",\"add\":10580,\"del\":662}]"}
    438 views