Перейти к содержимому

Как ввести последовательность чисел в python

  • автор:

Цикл while

Цикл while (“пока”) позволяет выполнить одну и ту же последовательность действий, пока проверяемое условие истинно. Условие записывается до тела цикла и проверяется до выполнения тела цикла. Как правило, цикл while используется, когда невозможно определить точное значение количества проходов исполнения цикла.

i = 0
while i 5 :
print (i)
i += 1

Цикл while и цикл for имеют схожую структуру, НО есть одно важное различие — цикл while может быть бесконечным.

i = 0
while True :
print (i)
i += 1

# Вывод:
>>> 0
>>> 1
>>> 2
>>> 3
>>> 4
# Это может продолжаться долго.

Код выше будет бесконечно печатать возрастаютщую последовательность чисел.

Цикл while можно сравнить с цикличным условным оператором.

text = ‘Hello world’
i = 0
while i len (text):
print (text[i])
i += 1

Код, приведенный выше, печатает строку посимвольно. Приведу пример аналогичного цикла for:

text = ‘Hello world’
for i in text:
print (i)

Более того, я приведу даже два цикла for!

text = ‘Hello world’
for i in range ( len (text)):
print (text[i])

Напомню, что отличие между двумя, приведенными выше примерами, в следующем: первый цикл проходит по элементам последовательности (в нашем случае строки), а второй — по ее индексам. Здесь также используется функция len(), которая позволяет узнать длину последовательности.

Вернемся к циклу while. Цикл while, как и цикл for, можно остановить с помощью специальной управлющей конструкции break.

j = 0
while True :
if j == 3 :
print ( ‘Выход из цикла’ )
break
print (j)
j += 1

Конструкция break прерывает цикл. Она очень похожа на обычное условие после ключевого слова while.

Так же есть еще одна управляющая конструкция — continue. С ее помощью мы можем не выпонять текущую итерацию (повторение) цикла и перейти сразу к следующему.

j = 0
while j 5 :
j += 1
if j == 3 :
print ( ‘Пропускаем j == 3 ‘ )
continue
print (j)

Как и для цикла for, для цикла while мы можем записать конструкцию else.

from random import randint
j = 0
element = randint ( 0 , 15 )
while j 10 :
j += 1
if j == element:
print ( ‘Нашли element, он равен’ , element)
break
else :
print ( ‘Неудачная попытка’ )

Примеры решения задач

Возведение числа в степень с помощью цикла while

n = int ( input ()) # число
k = int ( input ()) # степень
i = 1 # текущая степень
result = 1
while i k:
result *= n
i += 1
print (result)

Сумма последовательности с помощью цикла while

n = int ( input ())
result = 0
i = 0
while i n:
result += i
i += 1
print (result)

Ввод последовательности чисел

i = 0
while True :
n = input ()
if n == ‘end’ :
print ( ‘Ввод закончен’ )
print ( ‘Было введено’ , i, ‘чисел’ )
break
n = int (n)
i += 1

Сумма введенных чисел

i = 0
summa = 0
while True :
n = input ()
if n == ‘end’ :
print ( ‘Ввод закончен’ )
print ( ‘Было введено’ , i, ‘чисел’ )
print ( ‘Их сумма равна’ , summa)
break
n = int (n)
summa += n
i += 1

Решение задач

1. Дано положительное число N. Вывести все числа от 0 до N с помощью цикла while.

2. Дано положительное число N. Вывести все числа от N до 0 с помощью цикла while. Пример:

3. Даны два положительных числа K и N (K 4. Даны положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти длину незанятой части отрезка A (взятие остатка A % B)

5. Даны положительные числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без наложений). Не используя операции умножения и деления, найти количество отрезков B, размещенных на отрезке A (деление нацело A // B)

6. Дано положительное число N. Найти сумму всех четных чисел от 0 до N с помощью цикла while.

7. Даны два положительных числа K и N (K нечетных чисел от K до N с помощью цикла while.

8. Дано положительное число N. Найти факториал числа N. Факториалом числа называется произведение всех чисел от 1 до N. Например, факториал числа 5 равен 5! = 1*2*3*4*5 = 120 , 2! = 1*2 = 2 , 9! = 1*2*3*4*5*6*7*8*9 = 362880

9. Дано целое число N (> 0). Если оно является степенью числа 3, то вывести YES, если не является — вывести NO.

10. Дано целое число N (> 0). Найти двойной факториал N: N!! = N * (N-2) * (N-4)* . . Для решения этой задачи посмотрите на задачу 2

Сложные задачи

1. Дано целое число N (> 1). Найти наименьшее целое число K, при котором выполняется неравенство 3^K > N, где 3^K — это 3 в степени K или число 3, умноженное само на себя K раз. Например, 3^5 = 3*3*3*3*3 . Ответом в задаче будет первая степень числа 3, которая больше, чем заданное число N. Например, если N=41, распишем степени числа три: 3^1 = 3; 3^2 = 3*3 = 9; 3^3 = 3*3*3 = 27; 3^4 = 3*3*3*3 = 27 * 3 = 81; . Таким образом, первая степень, в которую возвести число 3, превышающая число N — это 4.
В этой задаче нужно выполнять цикл while, пока остаток от деления на число три равен 0

2. Дано целое число N (> 0). Используя операции деления нацело и взятия остатка от деления, вывести все его цифры, начиная с самой правой (разряда единиц).
Перед решением этой задачи вспомните, как найти сумму цифр трехначного числа.

3. Даны целые положительные числа A и B. Найти их наибольший общий делитель (НОД), используя алгоритм Евклида: НОД(A, B) = НОД(B, A mod B), если B = 0; НОД(A, 0) = A.

4. Спортсмен-лыжник начал тренировки, пробежав в первый день 10 км. Каждый следующий день он увеличивал длину пробега на P процентов от пробега предыдущего дня (P — вещественное, 0 5. Дано целое число N (> 1). Последовательность чисел Фибоначчи FK определяется следующим образом: F(1) = 1, F(2) = 1, F(K) = F(K-2) + F(K-1), K = 3, 4, . . Проверить, является ли число N числом Фибоначчи. Если является, то вывести TRUE, если нет — вывести FALSE.

6. Даны положительные числа A, B, C. На прямоугольнике размера A x B размещено максимально возможное количество квадратов со стороной C (без наложений). Найти количество квадратов, размещенных на прямоугольнике. Операции умножения и деления не использовать.

7. Дано целое число N (> 1), являющееся числом Фибоначчи: N = F(K). Найти целое число K — порядковый номер числа Фибоначчи N.

Циклы¶

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

Цикл for ¶

Цикл for..in осуществляет итерацию по последовательности объектов, т.е. проходит через каждый элемент в последовательности. Мы узнаем больше о последовательностях на следующих уроках, а пока просто запомните, что последовательность – это упорядоченный набор элементов.

В этом примере функция range возвращает объект последовательнсоти. Обратите внимание, что правая граница не включается.

Есть несколько способов создания последовательности с помощью функции range .

Возвращает последовательность от start до stop (не включительно) с шагом step .

Оператор break ¶

Оператор break служит для прерывания цикла, т.е. остановки выполнения команд даже если условие выполнения цикла ещё не приняло значения False или последовательность элементов не закончилась.

Оператор continue ¶

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

Задачи¶

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

[for] Пользователь вводит числа a и b . Вывести все целые числа, расположенные между ними.

[for] Доработать предыдущую задачу так, чтобы выводились только числа, делящиеся на 5 без остатка.

[for] Пользователь вводит число. Вывести таблицу умножения на это число

[for] Известны оценки абитуриента на четырех экзаменах. Определить сумму набранных им баллов. Оценки вводятся в цикле.

[while] В бесконечном цикле приложение запрашивает у пользователя числа. Ввод завершается, как только пользователь вводит слово ‘end’. После завершения ввода приложение выводит сумму чисел.

[while] Дано натуральное число. Определить сумму цифр в нем.

Пользователь вводит число n и цифру a . Определить, сколько раз цифра встречается в числе. (не использовать метод count )

Как ввести последовательность чисел в python

Темой четвертой лекции курса «Python для журналистов» станут циклы while и for. Циклы позволяют проходить по всем элементам итерируемых объектов. При этом к итерируемым объектам относятся не только различные массивы данных (такие, как, например, списки), но и строки. Учитывая, что мы уже знаем, что такое строки и как с ними работать (а если вы не знаете, то посмотрите и почитайте нашу вторую лекцию), рассмотрим циклы на примере работы со строками.

Цикл while

Основной цикл в Python — цикл while (на русский язык переводится как «до тех пор пока. »). Его синтаксис похож на синтаксис условных конструкций (if, elif, else — об этом была наша третья лекция): while не будет выполнено условие: делай что-то.

Попробуем для начала распечатать каждую букву какой-нибудь строки. Например, начала стихотворения Александра Сергеевича Пушкина «Буря мглою. ». Введем имя poem и присвоим ему значение: poem = ‘Буря мглою’

Для того чтобы итерировать эту строку, нам нужно понять, каким должно быть условие остановки цикла. В данном случае таким условием будет конец строки. Иными словами, наш цикл должен печатать каждую букву до тех пор не закончится строка. Условно: while не закончится строка: print(букву)

Но как компьютер поймет, что закончилась строка? Все просто: у строк есть длина (функция len), так вот строка заканчивается тогда, когда индекс последней буквы равен длине строки. Давайте проверим длину нашей строки: len(poem). Значение ровно 10.

Теперь введем новое имя index и присвоим ему значение 0: index = 0. И мы готовы написать наш первый цикл.

while index != len(poem):

В этой конструкции нужно обратить внимание на несколько вещей. Первая: имя временной переменной index в цикле может быть любым, то есть мы могли написать и так: while i != len(poem) Вторая: знак != в Python означает неравенство. То есть в нашем примере мы как бы говорим: «До тех пор пока index не равен длине строки, печатай каждую букву строки». Это означает, что как только index станет равен 10, цикл завершит свою работу. Третья: у каждого элемента строки есть свой индекс, поэтому мы можем печатать букву под каждым следующим индексом. Четвертая: для того, чтобы условие цикла было выполнено, нам нужно на каждой итерации увеличивать index. В противном случае, цикл окажется вечным и наша программа зависнет. Так вот для того, чтобы index увеличивался на каждой итерации, мы прибавляем к нему единицу: index += 1.

Конструкция += — это так называемый «синтаксический сахар» языка Python, то есть синтаксис, который позволяет писать более удобный, читаемый и краткий код. Конструкция index += 1 равносильна выражению index = index + 1

Посчитаем гласные

Теперь, когда мы знаем, как итерировать строки, попробуем решить простую задачку — посчитать количество гласных в нашей строке. Для этого введем новое имя vowels (что переводится как «гласные» на русский язык) и присвоим ему значение ‘аоэеиыуёюя’ — это все гласные русского алфавита.

Когда у нас есть список всех гласных алфавита, мы можем проверить, является ли буква из нашей строки poem гласной. Для этого можно использовать ключевое слово Python — in: poem[0] in vowels — распечатает False, что логично, потому что буква «Б» (первая буква стихотворения) — согласная. А вот poem[1] in vowels распечатает True, потому что буква «у» (вторая в стихотворении) — гласная.

Теперь мы можем написать такой цикл:

while index != len(poem):

if poem[index].lower() in vowels:

Этот цикл проверяет каждую букву строки — относится она к гласным или нет. Если да (if poem[index].lower() in vowels), то эта буква распечатывается. Обратите внимание, что мы также меняем регистр каждой буквы с помощью функции lower(), чтобы проверить в том числе заглавные буквы.

Но пока мы только распечатываем гласные буквы, а нам бы хотелось их сохранить и посчитать их количество. Сделать это просто. Введем новое имя poem_vowels и присвоим ему значение пустой строки: poem_vowels = » Теперь немного изменим наш цикл:

while index != len(poem):

if poem[index] in vowels:

У нас изменилась всего лишь одна строчка: poem_vowels += poem[index] — это изменение основано на том, что строки можно конкатенировать, то есть складывать. И мы как бы говорим циклу: «До тех пор пока index не равен длине строки; если буква гласная, то прибавляй ее к строке poem_vowels».

Теперь poem_vowels — это строка со всеми гласными из стихотворения. И, чтобы узнать, сколько в ней этих гласных, нужно просто узнать ее длину с помощью функции len: print(len(poem_vowels))

Цикл for

Цикл for — это тоже «синтаксический сахар» языка Pytnon, благодаря которому проще итерировать объекты, а код становится более читаемым. Например, если бы мы хотели распечатать все буквы того же стихотворения, как мы это делали с циклом while, нам бы потребовалось написать гораздо меньше кода:

Обратите внимание, что в цикле for нам даже не нужно помнить об индексе — цикл «проходится» по каждому элементу массива (в данном случае строки), зная, когда она закончится. Таким образом, чтобы решить ту же задачку по поиску гласных в стихотворении, нам нужно написать такой цикл:

if i.lower() in vowels:

Функция range

Конструкция цикла for, безусловно, удобна тем, что она позволяет добираться до каждого элемента итерируемого объекта без индекса, но что если мы хотим все-таки знать индекс? Например, мы бы хотели проверить, является ли каждая буква нашего стихотворения гласной, и если да, то распечатать её и её индекс, чтобы понимать, в каком месте строки она находится. Как нам это сделать? Воспользуемся функцией range, которая позволяет создавать любые последовательности чисел. Например, если бы мы хотели создать последовательность чисел от 0 до 10, нам бы потребовалось написать всего лишь одну строчку кода: range(11)

Функция range принимает три параметра: range(start, stop, step). Start — это начало (по умолчанию, начинается с 0) последовательности (включительно); stop — это конец (не включительно, и поэтому, чтобы создать последовательность чисел до 10 включительно, нам нужно прибавить единицу); step — это шаг последовательности. Если мы хотим, допустим, распечатать каждый четный элемент последовательности до 10 включительно, то мы можем написать такой цикл:

for i in range(0, 11, 2):

Теперь вернемся к нашей задаче: как добраться до индекса каждой буквы в строке и, если буква гласная, распечатать её вместе с индексом? Для этого воспользуемся range:

for i in range(len(poem)):

if poem[i].lower() in vowels:

print(f’Это гласная буква находится в позиции ‘)

Обратите внимание, что в этом цикле for мы уже обращаемся не напрямую к каждому элементу строки, а к их индексам.

Вложенные циклы

Циклы, как и условия, могут быть вложенными. Попробуем разобраться на примере двух массивов данных. Первый — это список с возрастом мужчин (male_data), второй — список с возрастом женщин (female_data). Предположим, наша задача состоит в том, чтобы взять каждого мужчину и сравнить его возраст с возрастом каждой женщины из массива. Для этого нам потребуется вложенный цикл for:

for male_age in male_data:

for female_age in female_data:

if male_age > female_age:

print(f’Возраст мужчины больше возраста женщины на ‘)

print(f’Возраст женщины больше возраста мужчины на ‘)

В этом блоке кода мы сначала берем первый элемент первого массива (male_data), затем проходимся по всем элементам второго массива (female_data) и сравниваем первый элемент первого массива с каждым элементом второго массива. Затем мы берем второй элемент первого массива и снова сравниваем его со всеми элементами второго массива. И так мы делаем до тех пор, пока не закончатся все элементы первого массива.

Тетрадку Jupyter Notebook с этим уроком можно найти в нашем GitHub здесь.

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

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