Работа мечты в один клик 💼

💭Мечтаешь работать в Сбере, но не хочешь проходить десять кругов HR-собеседований? Теперь это проще, чем когда-либо!
💡AI-интервью за 15 минут – и ты уже на шаг ближе к своей новой работе.
Как получить оффер? 📌 Зарегистрируйся 📌 Пройди AI-интервью 📌 Получи обратную связь сразу же!
HR больше не тянут время – рекрутеры свяжутся с тобой в течение двух дней! 🚀
Реклама. ПАО СБЕРБАНК, ИНН 7707083893. Erid 2VtzquscAwp
Цикл while в Python
В прошлой статье мы изучали цикл for – он
используется в тех случаях, когда заранее известно количество итераций,
совершаемых в цикле. Число исполнений цикла for определяется функцией range()
или размером коллекции. Если диапазон значений не
известен заранее, необходимо использовать другой цикл – while: он выполняется, пока не наступит
определенное событие (или не выполнится необходимое условие). По этой причине
цикл while называют условным. Вот пример простейшего цикла while – он выполняется, пока пользователь
не введет 0
:
n = int(input())
while n != 0:
print(n + 5)
n = int(input())
Цикл while также часто называют бесконечным, поскольку он может
выполняться до тех пор, пока пользователь не остановит его нажатием
определенной клавиши. Бесконечные циклы можно создавать намеренно – для
выполнения фонового скрипта, игры, прикладной программы. Но иногда цикл while может
стать бесконечным из-за ошибки. Например, если в приведенном выше коде не
указать ввод новой переменной n = int(input())
в теле цикла, while будет
бесконечно выводить одно и то же значение, пока пользователь не остановит выполнение программы нажатием Ctrl + C.
Управление бесконечным циклом while в Питоне
Самый простой способ управления бесконечным циклом –
использование оператора break
.
В приведенном ниже коде список lst
генерируется случайным образом, и до начала цикла его длина
неизвестна. Однако выполнение цикла можно оставить, как только список опустеет
в результате многократного выполнения операции pop()
:
import random
lst = [i for i in range(random.randint(5, 500))]
while True:
if not lst:
break
print(lst.pop())
Если выполнение цикла не остановить сразу же, как только список опустеет, появится ошибка:
IndexError: pop from empty list
Оператор break
также помогает сократить количество итераций и прекратить выполнение программы, как только нужное решение найдено. Например, таким образом можно найти наименьший делитель числа n, отличный от 1:
n = int(input())
i = 2
while True:
if n % i == 0:
break
i += 1
print(i)
Помимо break
,
управлять бесконечным циклом можно с помощью флагов (сигнальных меток). В
приведенном ниже примере программа бесконечно запрашивает у пользователя ввод
любого слова, пока пользователь не введет exit
. Это событие меняет статус цикла на False
, и работа программы завершается:
text = 'Введите любое слово: '
text += '\nИли введите exit для выхода: '
active = True
while active:
message = input(text)
if message == 'exit':
active = False
else:
print(message)
Пропуск итераций в цикле while
Оператор continue
можно использовать для пропуска операций, если элементы не соответствуют
заданным критериям. Этот код работает, пока не будет сформирован список из 5
элементов – при этом в список не включаются числа в диапазоне между 90 и 120, а
также число 50:
sp = []
while len(sp) < 5:
num = int(input())
if num == 50 or 90 <= num <= 120:
continue
sp.append(num)
print(sp)
Если пользователь введет набор цифр 45 50 121 119
95 105 3 4 7
, в список будут добавлены только числа, соответствующие
критериям:
[45, 121, 3, 4, 7]
Особенности цикла while
1. В цикле while можно использовать опциональный параметр else
. В этом примере процедура pop()
выполняется, пока
список не опустеет, после чего выводится сообщение Список пуст
:
import random
lst = [i for i in range(random.randint(5, 500))]
while len(lst) > 1:
print(lst.pop())
else:
print('Список пуст')
2. В цикле while можно использовать любое количество условий и условных
операторов and
, or,
иnot
:
n = int(input())
while True:
if n == 0:
break
elif n > 50 or n <= -50:
break
elif n % 2 == 0:
break
print(n / 5)
n = int(input())
3. Цикл while может быть вложенным. Этот код выводит простые числа из диапазона от 2 до 100:
i = 2
while(i < 100):
j = 2
while j <= i / j:
if not i % j:
break
j = j + 1
if j > i / j:
print(f'{i} - простое число')
i = i + 1
4. В качестве вложенных циклов while могут включать в себя циклы for. Этот код, к примеру, будет бесконечно печатать цифры в диапазоне от 0 до 5:
while True:
for i in range(5):
print(i)
5. Любой цикл for можно заменить циклом while, но обратное возможно только в том случае, когда количество итераций можно определить до начала цикла. К примеру, эти циклы while и for равнозначны – оба печатают цифры от 0 до 9:
i = 0
while i < 10:
print(i)
i += 1
for i in range(10):
print(i)
А этот цикл while заменить циклом for невозможно – программа будет бесконечно
возводить в квадрат все введенные пользователем числа, пока не получит 0
:
n = int(input())
while True:
if n == 0:
break
print(n ** 2)
n = int(input())
Практика
Задание 1
Напишите программу, которая принимает на вход целые числа и вычисляет их сумму, пока пользователь не введет 0.
Пример ввода:
4
5
6
0
Вывод:
15
Решение:
summa = 0
while True:
n = int(input())
summa += n
if n == 0:
break
print(summa)
Задание 2
Напишите программу, которая получает от пользователя число n > 100, и вычисляет (без использования методов строк) произведение цифр, из которых n состоит.
Пример ввода:
335
Вывод:
45
Решение:
n = int(input())
prod = 1
while n:
prod *= n % 10
n //= 10
print(prod)
Задание 3
Напишите программу, которая получает на вход два числа a и b, и находит наименьшее число c, которое без остатка делится на a и b.
Пример ввода:
7
12
Вывод:
84
Решение:
a, b = int(input()), int(input())
c = a
while c % b:
c += a
print(c)
Задание 4
Напишите программу, которая составляет строку из полученных от пользователя слов, пока длина строки не достигнет 50 символов. Слова, начинающиеся с гласных, в строку не включаются.
Пример ввода:
о
бойся
Бармаглота
сын
он
так
свиреп
и
дик
а
в глуще
рымит
Вывод:
бойся Бармаглота сын так свиреп дик в глуще рымит
Решение:
st = ''
while len(st) < 50:
word = input()
if word[0] in 'аиеёоуыэюя':
continue
st += ' ' + word
print(st)
Задание 5
Напишите программу для конвертации числа из десятичного системы
в двоичную без использования функции bin()
.
Пример ввода:
25
Вывод:
11001
Решение:
n = int(input())
result = ''
while n > 0:
result = str(n % 2) + result
n = n // 2
print(result)
Задание 6
Напишите программу, которая получает на вход число и без использования строковых методов переставляет цифры в обратном порядке.
Пример ввода:
176435
Вывод:
534671
Решение:
n = int(input())
rev = 0
while n!= 0:
r = n % 10
rev = rev * 10 + r
n = n // 10
print(rev)
Задание 7
Напишите программу для вычисления факториала числа n без использования функции math.factorial()
.
Пример ввода:
7
Вывод:
5040
Решение:
n = int(input())
fact = 1
while n > 1:
fact *= n
n -= 1
print(fact)
Задание 8
Напишите программу, которая получает от пользователя число n и определяет, является ли оно простым, или у него есть делители, кроме 1 и самого себя.
Пример ввода:
60
Вывод:
60 делится на 2
60 делится на 3
60 делится на 4
60 делится на 5
60 делится на 6
60 делится на 10
60 делится на 12
60 делится на 15
60 делится на 20
60 делится на 30
Таким образом, 60 не является простым числом
Решение:
n = int(input())
flag = False
i = 2
while i < n:
if n % i ==0:
flag = True
print(f'{n} делится на {i}')
i += 1
if flag:
print(f'Таким образом, {n} не является простым числом')
else:
print(f'{n} - простое число')
Задание 9
Напишите программу, использующую вложенный цикл while для вывода треугольника
размером n x n х n, состоящего из символов*
.
Пример ввода:
6
Вывод:
*
**
***
****
*****
******
Решение:
n = int(input())
i, j = 0, 0
while i < n:
while j <= i:
print('*', end='')
j += 1
j = 0
i += 1
print('')
Задание 10
Напишите программу для запоминания английских названий месяцев:
1. Русские названия месяцев выводятся в случайном порядке с
помощью метода random.shuffle()
.
2. Пользователь получает три попытки для написания правильного названия на английском.
3. После трех неверных попыток программа переходит к другому слову.
Пример ввода:
Месяц март по-английски называется: march
Месяц январь по-английски называется: January
Месяц август по-английски называется: august
Месяц май по-английски называется: may
Месяц апрель по-английски называется: aprile
Неверно! Осталось попыток: 2
Месяц апрель по-английски называется: aprill
Неверно! Осталось попыток: 1
Месяц апрель по-английски называется: appril
Неверно! Осталось попыток: 0
Попытки исчерпаны!
Месяц июль по-английски называется: july
Месяц сентябрь по-английски называется: september
Месяц июнь по-английски называется: june
Месяц октябрь по-английски называется: october
Месяц ноябрь по-английски называется: november
Месяц декабрь по-английски называется: december
Месяц февраль по-английски называется: february
Вывод:
Конец игры
Количество правильных ответов: 11
Число ошибок: 3
Решение:
import random
correct, wrong, attempts = 0, 0, 3
months = {'январь': 'January', 'февраль': 'February', 'март': 'March',
'апрель': 'April', 'май': 'May', 'июнь': 'June',
'июль': 'July', 'август': 'August', 'сентябрь': 'September',
'октябрь': 'October', 'ноябрь': 'November', 'декабрь': 'December'}
rand_keys = list(months.keys())
random.shuffle(rand_keys)
for key in rand_keys:
counter = 0
while counter < attempts:
spelling = input(f'Месяц {key} по-английски называется: ')
if spelling.title() == months[key]:
correct += 1
break
else:
counter += 1
wrong += 1
print(f'Неверно! Осталось попыток: {attempts - counter}')
else:
print(f'Попытки исчерпаны!')
print('Конец игры')
print(f'Количество правильных ответов: {correct}')
print(f'Число ошибок: {wrong}')
Подведем итоги
Цикл while используют в случаях, когда число итераций невозможно оценить заранее. Во всех остальных случаях лучше применять цикл for. Чтобы цикл while случайно не превратился в бесконечный, стоит продумать все события и условия, которые должны приводить к своевременному прерыванию программы.
В следующей статье приступим к изучению функций.
Содержание самоучителя
- Особенности, сферы применения, установка, онлайн IDE
- Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
- Типы данных: преобразование и базовые операции
- Методы работы со строками
- Методы работы со списками и списковыми включениями
- Методы работы со словарями и генераторами словарей
- Методы работы с кортежами
- Методы работы со множествами
- Особенности цикла for
- Условный цикл while
- Функции с позиционными и именованными аргументами
- Анонимные функции
- Рекурсивные функции
- Функции высшего порядка, замыкания и декораторы
- Методы работы с файлами и файловой системой
- Регулярные выражения
- Основы скрапинга и парсинга
- Основы ООП: инкапсуляция и наследование
- Основы ООП – абстракция и полиморфизм
- Графический интерфейс на Tkinter
- Основы разработки игр на Pygame
- Основы работы с SQLite
- Основы веб-разработки на Flask
- Основы работы с NumPy
- Основы анализа данных с Pandas
Комментарии