i04AX

Когда лед "инфосферы"*1 окреп настолько, что миллиарды людей бродят по нему даже не задумываясь о том как его создавали-строили, начинать изучение программирования с нуля (или единицы) -- не самый короткий путь. Поэтому знакомство с языком Python начнем со слова import (а не print).

-------
1*) по аналогии с ноосферой Вернадского, IT (information technologies) используемые большинством населения
-------

Для нас подойдет удобная программа Thonny (http://thonny.org/), кстати, спасибо соседу из Тарту за бесплатный "двигатель прогресса".

  а) import turtle
     # тогда, все, что черепаха умеет доступно через
     turtle.xxx

  б) from turtle import (forward, left)
     # теперь черепаха умеет только вперед и налево,
     # зато к ней не нужно обращаться.
     for i in range(3):
         forward(222)
         left(120)

  в) from turtle import *
     # внимание! враг подслушивает.
     # выполнить команду может кто угодно, если он ее услышал.
     # cильно не советую (* значит всё)

Черепашья графика была создана в первую очередь для знакомства с управляющими операторами языка программирования (>>> help(turtle), .. developed by Wally Feurzig and Seymour Papert in 1966).

Сама черепаха имеет несколько уровней сложности:

I.  идти вперед forward(n) или назад backward(n) на n-шагов
    повернуть вправо right(a) или влево left(a) нa a-градусов
    поднять up() или опустить down() карандаш
    выбрать карандаш с толщиной линии width(w)
    выбрать карандаш c цветом color(c).

    from turtle import
        (forward, backward, right, left, up, down, width, color)

II. clear()    # почистить окно
    reset()    # сбросить черепаху

    pencolor( pc)
    fillcolor( fc)
    filling()  # is filling on?
    begin_fill()
     ..
    end_fill() # заливка цветом заполнения

    screen=turtle.Screen()    # работа с холстом
    screen.setup(800, 800)    # размер холста
    screen.bgpic('mybg.png')  # д.б. в папке 'Save as'.

    turtle.shape(turtle)      # курсор -- черепаха

... С рассмотренной и оставшейся частью интерфейса общения с черепахой можно ознакомиться по команде help( turtle) .

Замечание: Черепаха не видит своего холста. О том, как вернуть ей зрение можно почитать здесь:

  {1}. https://stackoverflow.com/questions/23579631
         /how-to-read-pixel-colours-using-python-turtle-py
  {2}. https://stackoverflow.com/questions/28014347
         /get-pixel-colors-of-tkinter-canvas
  {3}. https://stackoverflow.com/questions/138250
         /how-can-i-read-the-rgb-value-of-a-given-pixel-in-python

SSH
---

Lookup

  $ ip addr show | grep -A 1 enp0

Setup remote

  $ cat /etc/security/limits.conf | tail -n 3

  ##@student       -       maxlogins       4
  *                hard    maxlogins       2
  ## End of file

  $ cat /etc/ssh/sshd_config | grep 'Port '
  ##Port 22

Setup local

  $ cat /etc/hosts | head -n 3
  127.0.0.1       localhost
  127.0.1.1       RBOX
  192.168.1.192   blackboard

Use

  ssh -p 2222 virtu@blackboard
  ssh -p 2222 virtu@blackboard 'DISPLAY=:0.0 python3' < try.py
  scp -P 2222 virtu@blackboard:/home/virtu/remote.py .
  scp -P 2222 local.py virtu@blackboard:/home/virtu/

try.py

  #!/usr/bin/python
  import turtle
  turtle.width(5)
  for x in ['Blue','Aqua','Green','Yellow','Red','Purple']:
    turtle.color( x)
    turtle.right( 60)
    turtle.circle(100)

Ссылки
------

[1]. Turtle named colors
       https://wiki.tcl.tk/16166

[2]. Microsoft DOS color command
       https://www.computerhope.com/color.htm

[3]. How to disable Bash shell commands history on Linux
       https://linuxconfig.org
           /how-to-disable-bash-shell-commands-history-on-linux

Найдено в Сети. Примеры и ссылки
--------------------------------

Python random Bezier

  https://sites.google.com/site/algorithms2013/home
  /python-turtle-graphics/python-random-walk-with-bezier-curve

  #!python3
  # 2013-Jan-21 Mon 07:15
  import turtle, random, time

  def turtle_cubic_bezier(p0,p1,p2,p3, n=20):
      x0, y0 = p0[0], p0[1]
      x1, y1 = p1[0], p1[1]
      x2, y2 = p2[0], p2[1]
      x3, y3 = p3[0], p3[1]
      turtle.penup()
      turtle.goto(x0,y0)
      turtle.pendown()
      for i in range(n+1):
          t = i / n
          a = (1. - t)**3
          b = 3. * t * (1. - t)**2
          c = 3.0 * t**2 * (1.0 - t)
          d = t**3

          x = int(a * x0 + b * x1 + c * x2 + d * x3)
          y = int(a * y0 + b * y1 + c * y2 + d * y3)
          turtle.goto(x,y)
      turtle.goto(x3,y3)

  def r01(): return random.random()
  def r(): return int(r01()*200-100)
  def rr(): return(r(),r())
  def rmid(x1,x2): return int(x1+x2+r()/2)/2

  def next_points(points):
    p0, p3 = points[3], rr()
    p1 = rmid(p0[0],p3[0]), rmid(p0[1], p3[1])
    p2 = rmid(p0[0],p3[0]), rmid(p0[1], p3[1])
    return [p0,p1,p2,p3]

  def random_color():
    def t(i): return time.clock() * i % 1
    rbg =  [t(1), t(3), t(5)]
    print("rbg=(%3.2f,%3.2f,%3.2f)" % (rbg[0],rbg[1],rbg[2]))
    turtle.color(*rbg)

  def main():
      turtle.speed(0)
      turtle.colormode(1.)

      points = [rr(),rr(),rr(),rr()]
      i = 0
      while True:
        i=i+1
        print(i,*points)
        turtle_cubic_bezier(*points)
        points = next_points(points)
        random_color()
      turtle.Screen().exitonclick()

  if __name__ == "__main__":
      main()

Python. Heart

  from turtle import (right, left, forward,
                      color, begin_fill, end_fill)

  def curvemove():
      for i in range(200):
          right(1)
          forward(1)

  color('red','pink')
  begin_fill()
  left(140)
  forward(111.65)
  curvemove()
  left(120)
  curvemove()
  forward(111.65)
  end_fill()
  done()
