воскресенье, 22 декабря 2019 г.

4-A. Базовые конструкции алгоритмов

4-A. Базовые конструкции (виды) алгоритмов - обзор

1.4.1 - Линейные алгоритмы

Пусть имеется ученик Миша, которого мы хотим наделить способностями Черепахи:
import turtle as Миша
После чего, Миша будет способен выполнять команды:
вперед на x шагов - forward(x)
повернись влево на x градусов - left(n)
 и другие ...
In [1]:
import turtle as Миша # Да прибудет с Мишей черепашья сила
Миша.forward(200)     # Миша - вперед на 200 шагов
Миша.left(90)         # Миша повернись влево на 90 градусов
Миша.mainloop()# Не закрывай окно выполнения (мы сами нажмем крестик)
В окне выполнения Миша был представлен стрелочкой, что не симпатично. 
Облачим Мишу в костюм Черепахи - shape('turtle')




In [1]:
import turtle as Миша
Миша.shape('turtle')
Миша.forward(200)
Миша.left(90)
Миша.mainloop()
В обоих программах все команды были записаны друг за другом - в одну линию.
В таких программах (алгоритмах) команды будут выполняться в том порядке, в котором они записаны.
В этом случае говорят, что это линейные алгоритмы

1.4.2 - Вспомогательные алгоритмы

Если мы хотим научить исполнителя новой команде, то мы должны описать вспомогательный алгоритм:
  • с помощью команды def определить для него имя
  • в скобках указать параметры, от которых он будет зависеть (или оставить их пустыми)
  • поставить знак ":"
  • далее, с красной строки написать то, как будет реализована новая команда

Когда исполнитель встретит такое описание - он научиться новой команде, а выполнять ее будет только тогда, когда произойдет вызов по ее имени. Затем вернется в место, следующее после ее вызова.
Научим нашего Мишу прходить один круг по квадратному стадиону. Благодаря вспомогательному алгоритму сторона(), у нас сократится количество записанных команд.
In [1]:
import turtle as Миша
Миша.shape('turtle')
def сторона():
    Миша.forward(200)
    Миша.left(90)
сторона()
сторона()
сторона()
сторона()

1.4.3 - Ветвления

  • Сокращенное ветвление:  if (ответвление)
  • Разветвление:  if - else:
  • Множественное ветвление:  if - elif - ... - elif - else:
Научим Мишу менять цвет, оставляемого им следа
pencolor() - узнать текущий цвет
pencolor('цвет') - поменять на 'цвет'
In [1]:
import turtle as Миша
Миша.shape('turtle')
def сторона():
    Миша.forward(200)
    Миша.left(90)
# Сокращенное ветвление if (ответвление):
    if Миша.pencolor()=='black':
        Миша.pencolor('red')
сторона()
сторона()
сторона()
сторона()
In [1]:



import turtle as Миша
Миша.shape('turtle')
def сторона():
    Миша.forward(200)
    Миша.left(90)
# Разветвление if - else:
    if Миша.pencolor()=='black':
        Миша.pencolor('red')
    else:
        Миша.pencolor('black')
сторона()
сторона()
сторона()
сторона()
In [1]:
import turtle as Миша
Миша.shape('turtle')
def сторона():
    Миша.forward(200)
    Миша.left(90)
# Множественное ветвление if - elif - ... - elif - else:
    if Миша.pencolor()=='black':
        Миша.pencolor('red')
    elif Миша.pencolor()=='red':
        Миша.pencolor('blue')
    elif Миша.pencolor()=='blue':
        Миша.pencolor('green')
    elif Миша.pencolor()=='green':
        Миша.pencolor('gray')
    else:
        Миша.pencolor('black')
сторона()
сторона()
сторона()
сторона()

1.4.4 - Циклические

с многократно повторяющимися подряд командами
ТЦ - тело цикла (команды, которые надо повторять)
Цикл for - повторяет ТЦ, для каждого значения в объекте
In [1]:
import turtle as Миша
Миша.shape('turtle')
def сторона():
 Миша.forward(200)
 Миша.left(90)
 if Миша.pencolor()=='black':
  Миша.pencolor('red')
 elif Миша.pencolor()=='red':
  Миша.pencolor('blue')
 elif Миша.pencolor()=='blue':
  Миша.pencolor('green')
 elif Миша.pencolor()=='green':
  Миша.pencolor('gray')
 else:
  Миша.pencolor('black')
for __ in '1234': # будет выполнять ТЦ для каждого (1,2,3,4) из строки '1234'
    сторона()     # ТЦ
Миша.mainloop()
Цикл while - повторяет ТЦ (после двоеточия, с красной строки), пока истинно высказывание, записанное между while и двоеточием
In [ ]:
import turtle as Миша
Миша.shape('turtle')
def сторона():
 Миша.forward(200)
 Миша.left(90)
 if Миша.pencolor()=='black':
  Миша.pencolor('red')
 elif Миша.pencolor()=='red':
  Миша.pencolor('blue')
 elif Миша.pencolor()=='blue':
  Миша.pencolor('green')
 elif Миша.pencolor()=='green':
  Миша.pencolor('gray')
 else:
  Миша.pencolor('black')
Круг=6
while Круг:
 for __ in 1,2,3,4:
  сторона()
 Круг = Круг - 1 
Миша.mainloop()


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

Отправить комментарий

AI