#!/usr/bin/env python # coding: utf-8 # # Python для сбора и анализа данных # # *Алла Тамбовцева, НИУ ВШЭ* # # *Данный ноутбук основан на [лекции](http://nbviewer.math-hse.info/github/ischurov/pythonhse/blob/master/Lecture%203.ipynb#%D0%9F%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0-%D1%83%D1%81%D0%BB%D0%BE%D0%B2%D0%B8%D0%B9) Щурова И.В., курс «Программирование на языке Python для сбора и анализа данных» (НИУ ВШЭ).* # ### Цикл `while` # С циклом `for` мы уже знакомы. Сейчас мы познакомимся с циклом `while`, логика которого отличается от `for`. Конструкции с циклом `while` устроены следующим образом: действия, которые указаны в теле цикла, должны выполняться до тех пор, пока верно условие, прописанное после `while` (отсюда и название). Если в цикле `for` мы указывали некоторый промежуток, по которому в ходе цикла мы будем "пробегаться", то в случае с циклом `while` мы просто фиксируем стартовую точку, а конечную точку никак не указываем: программа сама остановится, когда условие в цикле перестанет выполняться. # In[33]: nums = [1, 0, 9, 10, -1, 8] # Давайте, используя цикл `while`, будем выводить на экран элементы списка `nums` до тех пор, пока не столкнемся с отрицательным значением. # In[34]: i = 0 # начинаем с индекса i=0 while nums[i] >= 0: # пока элемент nums[i] >= 0 print(nums[i]) # выводим элемент на экран i = i + 1 # переходим к следующему элементу # На значении 10 мы остановились: за ним идет значение -1, для которого условие `nums[i] > = 0` не выполняется. # # Давайте теперь попробуем переписать код так, чтобы он работал точно так же, но только чтобы в нем использовался цикл `for`, а не `while`. Вообще почти любой код с `while` можно переписать через `for`, и иногда это полезно: код с циклом `while` обычно более медленный, плюс, склонен к зацикливанию. # In[35]: for n in nums: if n >= 0: print(n) else: break # выходим из цикла # В коде выше мы использовали оператор `break`, который позволяет выйти из цикла, то есть закончить исполнение строк кода в теле цикла и перейти к коду дальше. # # А теперь напишем маленькую игру-угадайку. Программа будет загадывать целое число от 1 до 100, а пользователь его угадывать. Как программа будет загадывать число? Выбирать случайным образом из интервала [1, 100] (на самом деле псевдослучайным образом, так как абсолютной случайности не получится, генерирование чисел происходит по фиксированным алгоритмам). # In[36]: from random import randrange # импортируем функию randrange # In[37]: n = randrange(1, 101) # n и есть загаданное число # Осталось написать цикл. До тех пор, пока пользователь не угадает число, программа не будет останавливаться, но зато она будет давать подсказки: если введенное пользователем число больше загаданного, то будет выводиться сообщение "Вы ввели слишком большое число.", если меньше – "Вы ввели слишком маленькое число." # In[38]: while True: guess = int(input("Ваша попытка: ")) if guess == n: print("Вы выиграли!") break elif guess > n: print("Вы ввели слишком большое число.") else: print("Вы ввели слишком маленькое число.") # В коде выше в `while` мы не написали никакого условия явно, вместо этого мы написали `while True`. Это выражение означает «до тех пор, пока мы не вышли из цикла». В нашем случае это равносильно «до тех пор, пока не столкнулись с `break`», то есть пока наш ответ не совпал с загаданным числом.