Цикл While. Урок 7

Основы программирования на Python

Циклы — это инструкции, выполняющие одну и туже последовательность действий, пока действует заданное условие.

В реальной жизни мы довольно часто сталкиваемся с циклами. Например, ходьба человека — вполне циклическое явление: шаг левой, шаг правой, снова левой-правой и т.д., пока не будет достигнута определенная цель (например, школа или магазин). В компьютерных программах наряду с инструкциями ветвлениями (т.е. выбором пути действия) также существуют инструкции циклов (повторения действия). Если бы инструкций цикла не существовало, пришлось бы много раз вставлять в программу один и тот же код подряд столько раз, сколько нужно выполнить одинаковую последовательность действий.

Универсальным организатором цикла в языке программирования Python (как и во многих других языках) является конструкция while. Слово "while" с английского языка переводится как "пока" ("пока логическое выражение возвращает истину, выполнять определенные операции"). Конструкцию while на языке Python можно описать следующей схемой:

Примерное описание цикла while

Эта схема приблизительна, т.к. логическое выражение в заголовке цикла while может быть более сложным, а изменяться может переменная (или выражение) b.

Может возникнуть вопрос: "Зачем изменять a или b?". Когда выполнение программного кода доходит до цикла while, выполняется логическое выражение в заголовке, и, если было получено True (истина), выполняются вложенные выражения. После поток выполнения программы снова возвращается в заголовок цикла while, и снова проверяется условие. Если условие никогда не будет ложным, то не будет причин остановки цикла и программа зациклится. Чтобы этого не произошло, необходимо предусмотреть возможность выхода из цикла — ложность выражения в заголовке. Таким образом, изменяя значение переменной в теле цикла, можно довести логическое выражение до ложности.

Блок-схема цикла while

Эту изменяемую переменную, которая используется в заголовке цикла while, обычно называют счетчиком. Как и всякой переменной ей можно давать произвольные имена, однако очень часто используют буквы i и j. Простейший цикл на языке программирования Python может выглядеть так:

str1 = "+" 
i = 0
while i < 10:
	print (str1)
	i = i + 1

В последней строчке кода происходит увеличение значения переменной i на единицу, поэтому с каждым оборотом цикла ее значение увеличивается. Когда будет достигнуто число 10, логическое выражение i < 10 даст ложный результат, выполнение тела цикла будет прекращено, а поток выполнения программы перейдет на команды следующие за всей конструкцией цикла. Результатом выполнения скрипта приведенного выше является вывод на экран десяти знаков + в столбик. Если увеличивать счетчик в теле цикла не на единицу, а на 2, то будет выведено только пять знаков, т.к цикл сделает лишь пять оборотов.

Более сложный пример с использованием цикла:

fib1 = 0
fib2 = 1
print (fib1)
print (fib2)
n = 10
i = 0
while i < n:
	fib_sum = fib1 + fib2
	print (fib_sum)
	fib1 = fib2
	fib2 = fib_sum
	i = i + 1

Этот пример выводит числа Фибоначчи — ряд чисел, в котором каждое последующее число равно сумме двух предыдущих: 0, 1, 1, 2, 3, 5, 8, 13 и т.д. Скрипт выводит двенадцать членов ряда: два (0 и 1) выводятся вне цикла и десять выводятся в результате выполнения цикла.

Как это происходит? Вводятся две переменные (fib1 и fib2), которым присваиваются начальные значения. Присваиваются значения переменной n и счетчику i, между которыми те или иные математические отношения формируют желаемое число витков цикла. Внутри цикла создается переменная fib_sum, которой присваивается сумма двух предыдущих членов ряда, и ее же значение выводится на экран. Далее изменяются значения fib1 и fib2 (первому присваивается второе, а второму - сумма), а также увеличивается значение счетчика.

Практическая работа

  1. Напишите скрипт на языке программирования Python, выводящий ряд чисел Фибоначчи (см. пример выше). Запустите его на выполнение. Затем измените код так, чтобы выводился ряд чисел Фибоначчи, начиная с пятого члена ряда и заканчивая двадцатым.
  2. Напишите цикл, выводящий ряд четных чисел от 0 до 20. Затем, каждое третье число в ряде от -1 до -21.
  3. Самостоятельно придумайте программу на Python, в которой бы использовался цикл while.

для этого существует команда

для этого существует команда break она принудительно прерывает цикл и продолжает выполнение скрипта

a, b , i, n = 0, 1, 0, 100

a, b , i, n = 0, 1, 0, 100 #Fibonacci range 1-100
<while> i < n:
    <if> i >= 5 <and> i <= 20: #range 5-20
        <print> a
    a, b = b, a + b
    i = i + 1
<input>()

Задание 1 (Питон 2.7)

Есть небольшая особенность в

Есть небольшая особенность в Питоне:
Возьмем такой пример.

def do_some():
  print 'do_some'
    return 10
i=0
while i < do_some():
  print 'i=',i,
  i+=1

Теперь чуть-чуть изменим код:
def do_some():
  print 'do_some'
  return 10
i=0
ds=do_some()
while i < ds:
  print 'i=',i,
  i+=1

Выражение вычисляется в момент обращения к нему, поэтому в 1м случае do_some была вызвана 10 раз, во втором только 1.
Поиздеваемся ещё:
def do_some():
  print 'do some'
  return 10
i=0
while i < do_some():
  print 'i=',i,
  if i > 5:
    def do_some():
      print 'some =',i
      return 20-i
  i+=1

Задание 1 >>> fib1 55 >>>

Задание 1

>>> fib1
55
>>> fib0 = 3
>>> fib1 = 5
>>> n = 15
>>> i = 0
>>> while i < n:
	fib_sum = fib0 + fib1
	print(fib_sum)
	fib0 = fib1
	fib1 = fib_sum
	i = i + 1

Ряд четных

Ряд четных чисел
4+6-2=8
6+8-4=10
8+10-6=12
10+12-8=14
a+b-c=d
a=b
b=d
c=a

А я так сделал fib1 = 0 fib2

А я так сделал

fib1 = 0
fib2 = 1
n = 10
i = 0
 while i < 10:
	fib_sum = fib1 + fib2
	fib1 = fib2
	fib2 = fib_sum
	i = i + 1
	if i > 3:
		print (fib_sum)

Задание 2 если в вашей

Задание 2
если в вашей последовательности были дробные

i=0
while i<20:
	i=i+0.5
	if not(i%2):
	       print i

i=0 while i<20:

i=0
while i<20:
        i=i+2
        print (i)

Домашнее задание

Задание 1:

fib1 = 0
fib2 = 1
print (fib1)
print (fib2)
n = 18
i = 0
while i < n:
	fib_sum = fib1 + fib2
	if i >=2:
            print (fib_sum)
	fib1 = fib2
	fib2 = fib_sum
	i = i + 1

Задание 2. (Каждое третье в диапазоне [-21;-1])

i = 0
while i > -21:
    i = i - 3
    print i

Подскажите как правильно ответить

Хочу вставить свою работу, так что бы команды подсвечивались не получается, я не знаю как. А практическую работу кажется сделал, но показать не могу.

Чтобы код был с подсветкой

Чтобы код был с подсветкой синтаксиса обрамите его html-тегом code. Для этого можно просто выделить код и нажать на кнопку "<>".

2 вопрос

Правильно второй вопрос реализован?

#!/usr/bin/python3
 
x = -1
print(x)
 
while x > -21:
     x = x - 2
     print(x)

В смысле, получается правильно, но какой эталонный вариант?

x = -1 while x > -21:

x = -1
while x > -21:
    print(x)
    x = x - 3

Почему уменьшаете на 2, если нужен лишь каждый третий элемент?
Переменную из логического выражения в данном случае проще изменять в конце цикла, а не в начале.
Если -21 должно входить в диапазон, то выражение в заголовке цикла while должно быть таким x >= -21.

Точно не знаю, но вряд ли в программировании бывают эталонные варианты. Можно по разному. Обычно исходят из того, какой код быстрее работает и легче воспринимается программистом (более очевиден).

ПОЖАЛУЙСТА, подскажите, как

ПОЖАЛУЙСТА, подскажите, как можно написать программу, которая спрашивает у пользователя слово и число и выводит на экран введённое слово введённое число раз.Пробовала, никак не выходит (((

#!/usr/bin/env python name =

#!/usr/bin/env python
name = raw_input("word: ")
number=int(input('number: '))
number=number+1
s=1
while s < number:
    print " - " + name + ""
    s=s+1
 
 

#! /usr/bin/env python #

#! /usr/bin/env python
# coding: utf-8
word = raw_input("Введи слово: ")
number=int(input('Введи число: '))
print (" " + word + "") * number

От нуля до 20 есть способ

От нуля до 20 есть способ нуль выводить как-то иначе, или такой вариант оптимальный?

x = 0
print(x)
 
while x < 20:
     x = x + 2
     print(x)

чем хуже for x in xrange(0,

чем хуже
for x in xrange(0, 20, 2):
print x

?)

+ там где от -1 до -21 нужно поправить на "от -21 до -1"...

Тем, что xrange еще не

Тем, что xrange еще не проходили..
Чего его сюда тулить?
Другого способа повышения самооценки не придумал?

Лучше, если с ней

Лучше, если с ней знакомы.
Кстати xrange в python 3 нет. Только range.

i = 0 while i <= 20:

i = 0
while i <= 20:
    print(i)
    i = i + 2

while

Можно, для особо одарёных,покаэать ответы
на домашнее задание.

ответы на дом. задание

1. задание

fib1 = 3
fib2 = 5
print (fib1)
print (fib2)
n = 18
i = 0
while i < n:
	fib_sum = fib1 + fib2
	print (fib_sum)
	fib1 = fib2
	fib2 = fib_sum
	i = i + 1

2. задание

i = 0
while i <= 20:
	print i
	i = i + 2

Python-whil

Thank you very much! (Спасибо!)

1) fib1 = 0 fib2 = 1 if fib2

1)

fib1 = 0
fib2 = 1
if fib2 > 2:
    print (fib1)
    print (fib2)
n = 20
i = 0
while i < n:
    fib_sum = fib1 + fib2
    if i >=2:
        print (fib_sum)
    fib1 = fib2
    fib2 = fib_sum
    i = i + 1

Прошу помогите решить

Прошу помогите решить задачу!!
Вывести на экран произведение чисел от 15 до 21 всю сумму!

i = 15 j = 21 summ =

i = 15
j = 21
summ = 1
 
while i <= j :
	if summ != 1 and i < j:
		print summ, "*",
	summ = summ * i
	i += 1
	if i == j :
		print "=", summ

i = 15 j = 21 summ =

i = 15
j = 21
summ = 1
 
while i <= j :
	summ = summ * i
	i += 1
print (summ)