Различия между версиями 2 и 3
Версия 2 от 2018-10-09 16:00:04
Размер: 4194
Редактор: FrBrGeorge
Комментарий:
Версия 3 от 2018-10-09 17:32:07
Размер: 7626
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 6: Строка 6:
  {{{#!python
n = 0 # инициализация
while n<10: # проверка условия
    print(n) # тело
    n += 1 # изменение данных, участвующих в условии
  }}}
  * [[http://pythontutor.com/visualize.html#code=n%20%3D%200%0Awhile%20n%3C10%3A%0A%20%20%20%20print%28n%29%0A%20%20%20%20n%20%2B%3D%201%0A&cumulative=false&curInstr=0&heapPrimitives=true&mode=display&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false|Пошаговый просмотр]]
Строка 7: Строка 14:
  {{{#!python3
n = int(input()) # инициализация
while n: # проверка условия
    print(n*2+1) # тело
    n = int(input()) # изменение данных, участвующих в условии
print("Done")
  }}}
Строка 8: Строка 22:
 * Каноническая схема цикла   {{{#!python
n = 0
while n<10:
    print(n)
    # n += 1
  }}}
 * ⇒ Каноническая схема цикла
Строка 13: Строка 33:
 * Вложенные циклы
 {{{#!python
N = 4
i = 1
while i<=N:
    j = 1
    while j<=N:
        print(i, "*", j, "==", i*j)
        j += 1
    i += 1
 }}}
  * [[http://pythontutor.com/visualize.html#code=N%20%3D%204%0Ai%20%3D%201%0Awhile%20i%3C%3DN%3A%0A%20%20%20%20j%20%3D%201%0A%20%20%20%20while%20j%3C%3DN%3A%0A%20%20%20%20%20%20%20%20print%28i,%20%22*%22,%20j,%20%22%3D%3D%22,%20i*j%29%0A%20%20%20%20%20%20%20%20j%20%2B%3D%201%0A%20%20%20%20i%20%2B%3D%201%0A&cumulative=false&curInstr=0&heapPrimitives=true&mode=display&origin=opt-frontend.js&py=3&rawInputLstJSON=%5B%5D&textReferences=false|Пошаговый просмотр]]
  * Место инициализации во вложенном цикле.
   Вот этот код работает неправильно, потому что инициализация внутреннего цикла не находится непосредственно перед запуском этого цикла (⇒ выполняется всего один раз в самом начале)
   {{{#!python
N = 4
i = j = 1
while i<=N:
    while j<=N:
        print(i, "*", j, "==", i*j)
        j += 1
    i += 1
   }}}
'''TODO'''
Строка 14: Строка 58:
 * Вложенные циклы
Строка 19: Строка 62:
 * Форматная срока: `"произвольный текст{выражение:правила форматирования}произвольный текст…"
  * пример
 * Форматная срока: `f"произвольный текст{выражение:правила форматирования}произвольный текст…"`
  * примеры:
   * Фигурные скобки — это шаблон, выражение в них вычисляется и в строку подставляется результат
   {{{#!python
a, b = 4, 5
print(f"---===< {a}*{b}=={a*b} >===---")
   }}}
   * После ':' в шаблоне указывается, как форматировать. Число означает ширину в символах. Если оно слишком большое, оставшееся место заполнится пробелами. Если оно слишком маленькое, подставится нужное количество символов, и форматирование «поедет».
   {{{#!python
print(f"{a:7}**{b:5}=={a**b:2}")
   }}}
   * Можно указать, к какому краю отведённого места прижимать подстановку шаблона. '<' — к левому, '>' — к правому (по умолчанию), '^' — к середине
   {{{#!python
print(f"{a:^7}*{b:<7}=={a*b:6}")
   }}}
   * Числа могут быть дополнены незначащими нулями. У вещественных чисел указывается общая ширина
   {{{#!python
   a,b=2225,6
   f"{a:03}/{b:03}=={a/b:15.10}"
  }}}

Циклическое выполнение команд в зависимости от свойств данных

О соотнесении рекурсии и цикла: как правило необходимости в дополнительных пространствах имён нет, достаточно просто повторять одну и ту же последовательность действий, пока не изменятся свойства обрабатываемых данных.

Цикл

  • Цикл while

    • Цикл со счётчиком
         1 n = 0           # инициализация
         2 while n<10:     # проверка условия
         3     print(n)    # тело
         4     n += 1      # изменение данных, участвующих в условии
      
    • Пошаговый просмотр

    • Цикл с непредсказуемым окончанием (например, ввод до 0)
      n = int(input())      # инициализация
      while n:              # проверка условия
          print(n*2+1)      # тело
          n = int(input())  # изменение данных, участвующих в условии
      print("Done")
    • Бесконечный цикл
         1 n = 0
         2 while n<10:
         3     print(n)
         4     # n += 1
      
  • ⇒ Каноническая схема цикла
    1. инициализация
    2. проверка условия
    3. тело
    4. изменение
  • Вложенные циклы
       1 N = 4
       2 i = 1
       3 while i<=N:
       4     j = 1
       5     while j<=N:
       6         print(i, "*", j, "==", i*j)
       7         j += 1
       8     i += 1
    
    • Пошаговый просмотр

    • Место инициализации во вложенном цикле.
      • Вот этот код работает неправильно, потому что инициализация внутреннего цикла не находится непосредственно перед запуском этого цикла (⇒ выполняется всего один раз в самом начале)
           1 N = 4
           2 i = j = 1
           3 while i<=N:
           4     while j<=N:
           5         print(i, "*", j, "==", i*j)
           6         j += 1
           7     i += 1
        

TODO

  • Условные операторы в цикле
  • Операторы break и continue, когда нужны

  • Алгоритм «поиск первого», секция else: в цикле

Немного про форматные строки

  • Понятие о подстановке в шаблон
  • Форматная срока: f"произвольный текст{выражение:правила форматирования}произвольный текст…"

    • примеры:
      • Фигурные скобки — это шаблон, выражение в них вычисляется и в строку подставляется результат
           1 a, b = 4, 5
           2 print(f"---===< {a}*{b}=={a*b} >===---")
        
      • После ':' в шаблоне указывается, как форматировать. Число означает ширину в символах. Если оно слишком большое, оставшееся место заполнится пробелами. Если оно слишком маленькое, подставится нужное количество символов, и форматирование «поедет».
           1 print(f"{a:7}**{b:5}=={a**b:2}")
        
      • Можно указать, к какому краю отведённого места прижимать подстановку шаблона. '<' — к левому, '>' — к правому (по умолчанию), '^' — к середине

           1 print(f"{a:^7}*{b:<7}=={a*b:6}")
        
      • Числа могут быть дополнены незначащими нулями. У вещественных чисел указывается общая ширина
           1    a,b=2225,6
           2    f"{a:03}/{b:03}=={a/b:15.10}"
        
  • Язык форматирования

Д/З

  1. Прочитать и прощёлкать седьмую главу учебника

  2. Вводить целые числа до тех пор, пока среди них не встретится 0, и посчитать, сколько среди них было кратных трём (0 не считается). Вывести это значение.
    • Ввод:

     1
     2
     3
     4
     3
     7
     9
     3
     7
     0
    • Вывод:

     4
  3. Ввести натуральное число N и проверить, является ли оно точным кубом некоторого натурального числа. Сравнивать вещественные числа (то есть проверять содержит ли n**(1/3) ненулевую дробную часть) запрещено.

    • Алгоритм: для всех чисел i от 1 проверять, не равно ли i**3 == N, заканчивать цикл, когда i**3 больше N
  4. Ввести натуральное N и вывести все простые числа, не превосходящие N (простыми называются числа, которые делятся только на себя и на 1)
    • Алгоритм:
        для всех i от 2 до N (1 — не считается простым)
            для всех k от 3 до i-1 (на самом деле до корня из i, ну да ладно)
                если i делится на k, оно не простое, можно больше не проверять
            если i ни на какое k не делится, оно простое, вывести
  5. Ввести натуральное N и вывести хорошо выглядящую таблицу умножения от 1 до 12
    • (упрощение для упражнения) В одну колонку, но с условием, что все сомножители и произведения стоят строго друг над другом
    • В 4 колонки
    • (усложнение) В N колонок, где N вводится

Python/PsyPython2018/05_Circles (последним исправлял пользователь FrBrGeorge 2018-10-10 14:19:20)