Python Урок 2. Работа с циклами

Дата изменения: 28 марта 2023
На уроке рассматривается алгоритм работы с различными видами циклов на языке Питон (Python): цикл с предусловием While и цикл со счетчиком For. Объясняется возможность генерации в Python случайных чисел

Цикл WHILE

Цикл while — цикл с предусловием. Как правило данный цикл применяется, когда не известно сколько должно быть итераций цикла. Пример использования:

i = 5
while i < 15:
   print(i)
   i = i + 2  # вывод 5 7 9 11 13
Еще пример:

i = 0
while i < 100:
    i += 1
 
print(i) # 100

Комментарии в Python

Однострочный комментарий начинается с #.
Блочный комментарий можно использовать так (строго говоря, блочного комментария нет в Питоне):

#Однострочные Питон комментарии 
 
#  Это
#      блочный или многострочный
#          комментарий
'''
тоже блочный 
         комментарий
'''

Операторы break и continue

цикл while на питоне

Оператор break — выход из цикла
Оператор continue — выход из текущей итерации цикла

Задание: Определить, что выведет программа:

a=0
while a!=10:
    a=a+1
    if a==5:
        continue
    print (a)
    if a==7:
        break
print ("всё!")

Случайное число

В Python случайное число задается с помощью двух функций:

  • random() – случайное вещественное из полуинтервала [0,1) ;
  • randint(a,b) – случайное целое из отрезка [a,b].

Но для использования функция необходимо предварительно подключить библиотеку:

# подключение библиотеки:
from random import randint
# получение целого случайного числа в диапазоне от 1 до 10
x = randint(1,11)
 
# получение вещественного случайного числа в полуинтервале от 5 до 11
from random import random
x = 6*random() + 5
Пример: Написать программу для игры: Загадывается число (использовать функцию random). Пользователю предлагается угадать число. Если пользователь не угадывает, то ему предлагается угадать число снова и выдается подсказка, что число больше или меньше введенного. Так бесконечно, пока пользователь не введет слово exit. Бесконечный цикл организовать через while True: .

✍ Решение:

    import random
     
    number = random.randint(0, 100)
     
    while True:
        answer = input('Угадай число: ')
        if answer == "" or answer == "exit":
            print("Выход из программы")
            break
     
        if not answer.isdigit():
            print("Введи правильное число")
            continue
     
        answer = int(answer)
     
        if answer == number:
            print('Верно!')
            break
     
        elif answer > number:
            print('Загаданное число больше')
        else:
            print('Загаданное число меньше')

Использование else в комбинации с break

После цикла можно использовать блок else:, который будет выполнен один раз после окончания цикла, когда условие цикла станет неверно. Данный блок целесообразно использовать в сочетании с оператором break. Так, если выполняется инструкция break, то блок else уже не выполнится. Рассмотрим пример:

Пример: В цикле запрашивать числа до тех пор, пока не введен ноль. Проверять, есть ли среди введенных чисел, число n.

Пример вывода:

введите искомое число
>>5
1
2
3
4
5
Встретилось число 5
введите искомое число
>>5
1
2
3
0
Число не встретилось

✍ Решение:

    n=int(input('введите искомое число'))
    a = int(input())
    while a != 0:
        if a == n:
            print('Встретилось число', n)
            break
        a = int(input())
    else:
        print('Число не встретилось')
Задание Python 2_1: Последовательно вводятся ненулевые числа. Определить сумму положительных и сумму отрицательных чисел. Закончить ввод чисел при вводе 0. Для перевода из строки в целое число, использовать функцию int().
  
Пример вывода:

Введите числа:
-5  7  8  -2  0
сумма положительных: 15, сумма отрицательных: -7
Задание Python 2_2: При помощи цикла распечатать ряд Фибоначчи: 1 1 2 3 5 8 13 21.
Задание Python 2_3: Запрашиваются 10 чисел (целые значения от 0 до 1000). Опишите алгоритм, позволяющий найти и вывести минимальное значение среди введенных чисел, которые имеют чётное значение и не делятся на три.

  
Пример вывода:

Введите числа:
5  7  8  22  9  12  15  0   2   3
результат:  2
Задание Python 2_4: В цикле запрашиваются числа, пока не введен 0. Есть ли среди чисел четное число? Использовать блок else в комбинации с инструкцией break.

  
Пример вывода:

Введите числа:
1 3 5 0
результат:  четных нет
Введите числа:
1 3 5 6
результат:  четное число 6

Цикл FOR

В Python цикл for имеет такой синтаксис:
оператор цикла For на Питоне
Пример:

for i in range(3):
    print(i)
# 0
# 1
# 2

Пример с двумя параметрами:

for i in range(5, 8):
    print(i)
# 5
# 6
# 7
Пример:
Вывести степени двойки с 1-й по 10-ю.

✍ Решение:
 

for x in range(1,11): 
  print ( 2**x )
 
# 2 4 8 16 ... 1024

Меняем шаг цикла

Шаг счетчика цикла можно менять:

for x in range(1,11,2): 
  print ( 2**x )

Отрицательный шаг:

for i in range(10, 7, -1):
    print(i)
# 10
# 9
# 8

При работе со строкой
for i in 'hello world':
     if i == 'o':
         continue
     print(i, end='')
 
# hell  wrld

Пример использования break:

for i in 'hello world':
     if i == 'l':
         break
     print(i, end='')
 
# he
При работе со cписками
greetings = ["Good day", "hi","hello"]
for i in range(len(greetings)):
    print(i,greetings[i])
# 0 Good day
# 1 hi
# 2 hello

Пример работы с break и else (даны 10 чисел; определить, есть ли среди них введенное число):

n = int(input('введите число, которое нужно найти'))
for i in range(10):
    numb = int(input())
    if numb == n:
        print('Встретилось число', n)
        break    
else:
    print('число не встретилось')

Циклы с условием (короткие запросы)

Рассмотрим две реализации одних и тех же заданий.

Пример: Дан список целочисленных значений. Необходимо вывести удвоенные значения списка.

Пример вывода:

список: [1, 4, 6, 2, 10, 15, 20]

[2, 8, 12, 4, 20, 30, 40]

✍ Решение:

    Обычное решение:

    1
    2
    3
    4
    5
    
    numbers = [1, 4, 6, 2, 10, 15, 20]
     
    for i in numbers:
        print(i*2)
    # 2 8 12 4 20 30 40

    С помощью запроса:

    1
    2
    3
    
    numbers = [1, 4, 6, 2, 10, 15, 20]
    print([i*2 for i in numbers])
    # [2, 8, 12, 4, 20, 30, 40]
Пример: Даны два списка: 1. варианты блюд для завтрака и 2. здоровая пища. Необходимо выбрать те блюда для завтрака, которые находятся в списке здоровой пищи.

Пример вывода:

варианты блюд для завтрака: яйцо, брокколи, бутерброд, чипсы, торт
здоровая пища: яйцо, каша, омлет, брокколи

Хороший завтрак: яйцо, брокколи

✍ Решение:

    Обычное решение
    1
    2
    3
    4
    5
    6
    7
    
    healthy = ["яйцо", "каша","омлет","брокколи"]
    breakfast = ["яйцо","брокколи","бутерброд","чипсы","торт"]
    for i in breakfast:
        if i in healthy:
            print(i)
    # яйцо
    # брокколи
    Короткий запрос
    1
    2
    3
    4
    
    healthy = ["яйцо", "каша","омлет","брокколи"]
    breakfast = ["яйцо","брокколи","бутерброд","чипсы","торт"]
    print([i for i in breakfast if i in healthy])
    # ['яйцо', 'брокколи']

    Или с созданием нового списка:

    Обычное решение
    1
    2
    3
    4
    5
    6
    7
    8
    
    healthy = ["яйцо", "каша","омлет","брокколи"]
    breakfast = ["яйцо","брокколи","бутерброд","чипсы","торт"]
    healthy_breakfast=[]
    for i in breakfast:
        if i in healthy:
            healthy_breakfast.append(i)
    print(healthy_breakfast)
    # ['яйцо', 'брокколи']
    Короткий запрос
    1
    2
    3
    4
    5
    6
    
    healthy = ["яйцо", "каша","омлет","брокколи"]
    breakfast = ["яйцо","брокколи","бутерброд","чипсы","торт"]
    healthy_breakfast=[]
    healthy_breakfast[:] = [i for i in breakfast if i in healthy]
    print(healthy_breakfast)
    # ['яйцо', 'брокколи']
Задание: Определить, что выведет программа:

a=0
n=10
for i in range(1,n+1,2):
    a=a+1
    if a==5:
        continue
    print (a)
    if a==7:
        break
print ("всё!")
Задание Python 2_5: Составить программу для вычисления среднего арифметического N произвольных вводимых чисел.

Пример вывода:

Введите количество чисел:
6 
Введите числа:
-5  4  12  9  7  2
результат:  4,83
Задание Python 2_6: Исправить предыдущее задание (2_5) для работы со случайными числами.
Задание Python 2_7:
Найдите все трёхзначные и четырёхзначные числа Армстронга.

Число Армстронга. Числом Армстронга считается натуральное число, сумма цифр которого, возведенных в N-ную степень (N – количество цифр в числе) равна самому числу.
Например, 153 = 13 + 53 + 33.
Задание Python 2_8:
Напишите программу, которая запрашивает натуральное число N и выводит на экран все автоморфные числа, не превосходящие N.

Автоморфным называется натуральное число, если оно равно последним цифрам своего квадрата. Например, 252 = 625.
Задание Python 2_9:
Напишите программу, которая из заданного списка с целочисленными значениями выбирает только те значения, которые есть во втором списке. Решить двумя способами: обычное решение и с помощью запроса.

Примерный вывод:

первый =  [1, 4, 6, 2, 10, 15, 20]  
второй =  [30, 1, 15, 20, 25]
результат = [1, 15, 20]

Цикл for in при работе с множеством значений

Цикл удобно применять при работе с кортежами, списками, строками и диапазонами.

Кортеж — тип данных
Пример: Вывести на экран цвета радуги с их порядковыми номерами:

1-й цвет радуги - это красный
...

✍ Решение:
 

i = 1
for color in 'красный', 'оранжевый', 'желтый', 'зеленый', 'голубой', 'синий', 'фиолетовый':
    print(i,'-й цвет радуги - это ', color)
    i += 1

  
Другой вариант работы со счетчиком цикла:

for i in 1,2,3,'one','two','three':
                print(i)
При первых трех итерациях цикла переменная i будет принимать значение типа int, при последующих трех — типа str.

Еще примеры:

name = "Ivan"
 
for letter in name:
    print(letter)
# I
# v
# a
# n
Задание Python 2_10: Распечатывать дни недели с их порядковыми номерами. Кроме того, рядом выводить выходной ли это день или рабочий. Использовать кортеж.

1-й день недели - понедельник, рабочий день
...
13 комментариев

    FinkRA

    а кто-то знает как без работы со списками решить первое задание 2_3 – перебор и сравнение 10 числе?

    АДмин, проверь нумерацию заданий

      admin

      здесь имеется в виду, вводим каждое число в цикле. БЕЗ использования списков

        FinkRA

        я нашел решение чуть позже
        оно есть 😉

    Александр

    Не подскажите, кто автор уроков? Хочу попросить у него решения к заданиям по урокам Python. Так как не всегда понятно, как делать и свериться после выполнения бывает полезно.

      admin

      напишите на e-mail, внизу сайта написан

    Александр

    А можно ли попросить решения к заданиям по урокам Python. Часто решаю задачки офлайн, хочется иногда проверить правильность решения

    Елизавета

    Здравствуйте, подскажите, пожалуйста, я новичок в языке python. Я сделала программу, не могу понять в чем проблема, делаю по Вашему примеру. Пишет ошибка:
    a = 1

    answer = input («Введите число: «)

    while a != answer :
    a=a+1
    if a == answer — 1 :
    continue
    print (a)
    if a== answer :
    break
    print («Всё!»)

    b = input («Введите первое число: «)
    c = input («Введите второе число: «)

    while b != c :
    b=b+1
    if b == c-1 :
    print (b)
    if b == c :
    break
    c=c-1
    if c == b+1 :
    print (c)
    if c == b :
    break

    Елизавета

    Также мне нужно те же программы с for

    Алёна

    Доброе утро. Я очень извиняюсь, но устала смотреть на мучения ребёнка (это Сириус Питон, решил все задачи, а эта уже неделю не даётся). Помогите решить задачу, просто намекните, что у него в коде не так. УСЛОВИЕ: Даны целые неотрицательные числа a, b, c, d, при этом 0≤c<d. Выведите в порядке возрастания все числа от a до b, которые дают остаток c при делении на d.
    В этой задаче нельзя использовать инструкцию if, операторы сравнения (< и т.д.), должен быть только один цикл.
    Входные данные
    На вход подаются четыре строки, в каждой из которых написано по одному неотрицательному целому числу — a, b, c, d. Все числа не превосходят 2∗109, 0≤c<d.
    несколько его решений:
    1)
    a, b, c, d = int(input()), int(input()), int(input()), int(input())
    res = ''

    for i in range(a, b + 1):
    if i % d == c:
    res += str(i) + ' '

    print(res)

    2)
    a, b, c, d = int(input()), int(input()), int(input()), int(input())
    res = ''

    for i in range(a, b + 1):
    res += str(i) * (i % d == c) + ' '

    print(res.rstrip())

    3)
    a = int(input())
    b = int(input())
    c = int(input())
    d = int(input())
    lst = [i for i in range(a, b + 1)]
    print(*list(filter(lambda x: x % d == c, lst)))

    Paul

    у вас имеются пару ошибок
    1
    elif answer < number:
    print('Загаданное число больше')
    else:
    print('Загаданное число меньше')
    здесь перепутано "меньше" и "больше"
    2.for i in range(3):
    print(i)
    # 1
    # 2
    # 3
    Здесь вывод роги будет
    0
    1
    2

      admin

      Спасибо! исправлено)

    Александр

    Мой вариант на поиск чисел Армстронга, правда, вродь некоторых нехватает… или мне кажется

    for nbr in range(100, 9999):
    n = nbr
    arr = []
    while (n % 10 != 0):
    arr.append(n % 10) # создаёт массив цифр из числа
    n = int(n / 10)
    arr = arr[::-1] # делает реверс массива arr
    for f in range (1,9): # цикл для наращивания степени чисел
    sum = 0
    for i in range(len(arr)): #цикл суммирование отдельно каждого числа в одинаковой степени
    sum += int(arr[i])**f
    if sum == nbr:
    print(«This is Armstrong number, number is: %s» %nbr)
    break

      Александр

      отступы не отразились тут, но думаю главное логика… не судите строго, только учусь)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

*
*

Вставить формулу как
Блок
Строка
Дополнительные настройки
Цвет формулы
Цвет текста
#333333
Используйте LaTeX для набора формулы
Предпросмотр
\({}\)
Формула не набрана
Вставить