カメときれいなパターンを描く方法


先週ポストするのを忘れたが、ここで我々は行きます.私は、Pythonに決めました🐍 私のskillsetに加えること.主にバックエンド(フラスコ、django)が、将来分岐することがあります.私は次のguide Redditの上で/u/travisjungrothによって掲示されます.現在進行中ですRunestone Interactivethinkcspy コース.

NOTE: You should be familiar with Python basics such as variables, for loop, and functions. Also, the Turtle library.


作成するパターンです.

最初は、このパターンは非常に複雑に見えます、しかし、我々が小さい塊にそれを壊すならば、その管理可能です.形を探して、見ることができます、パイスライス:

さらに見ると、正方形に気づく.

さらに検討すると、4つの正方形のグリッドが見えます.

小さく始めて、解決策を解決しよう.まず、カメライブラリをインポートし、キャンバスを設定しましょう.
import turtle

tess = turtle.Turtle()
wn = turtle.Screen()

tess.speed(10)
tess.pensize(2)
tess.color('blue')
wn.bgcolor('lightgreen')
各行を調べましょう
import turtle
これはタートルライブラリをインポートします.
tess = turtle.Turtle()
これはtess 私たちのカメのオブジェクト.
wn = turtle.Screen()
wn パターンが描画されるスクリーンオブジェクトを作成します.
tess.speed(10)
これは、ペンの描画速度を調整します.1 が遅い10 速い.
tess.pensize(2)
これは、線のサイズを調整します.
tess.color('blue')
これはペン色を青に設定します.
wn.bgcolor('lightgreen')
これは、キャンバスの背景色をlightgreenに設定します.
今、すべてのセットアップコードが行われ、問題に取り組む.
の作成から始めましょうdrawSquare 関数.
def drawSquare(t, sz):
    for i in range(4):
        t.fd(sz)
        t.left(90)
各行で行きましょう
def drawSquare(t, sz):
これはdrawSquare つのパラメータをとる関数.t カメオブジェクトを表します、そしてsz 正方形の辺の長さの大きさ.
for i in range(4):
私たちはfor ループを4回繰り返します.
    t.fd(sz)
これはタートルオブジェクトを前方に動かしますsz ユニット.
   t.left(90)
これはカメを回転させる90 度.
関数を呼び出してみましょう.
drawSquare(tess, 100) 
コールdrawSquare 2つの引数を指定します.tess タートルオブジェクトとして100 サイズとして.次の結果を得る必要があります.

今私たちは知っているdrawSquare 作品は、グリッドを作り始めることができます.心に留めておくべきこと.バック小学校では、私はユニークな図形や円を描画するためにコンパスを使用します.また、図形を描画するコンパスを中心に.この知識は、後に我々を助けます.をつくりましょうdrawGrid 関数.
def drawGrid(t, sz):
    for i in range(4):
        drawSquare(t, sz)
        t.left(90)
def drawGrid(t, sz):
我々は宣言するdrawGrid つのパラメータをとる関数.t タートルオブジェクトsz はグリッドの正方形の辺の長さです.
for i in range(4):
再び、我々はfor ループを4回繰り返します.これはグリッドの4つの正方形を説明します.
    drawSquare(t, sz)
これはdrawSquare つのパラメータを持つ関数.t タートルオブジェクトとsz 正方形のサイズです.
t.left(90)
これで亀は左に曲がる90 度.
今我々drawGrid 関数が完了したらテストしましょう.
drawGrid(tess, 100)
この呼び出しdrawGrid を返します.tess タートルオブジェクトと100 は正方形の長さの大きさです.
次の結果を得る必要があります.

NOTE: Arguments and parameter have different meaning. Arguments is data passed to function and parameters are what the function accepts.


亀が現在あるところに注意してください.位置( 0 , 0 )です.これは、正方形とグリッドを描画するための起源です.これは、我々が後で見るように、それらを回転させるとき、格子がゆがめられることがないように、必要です.
私たちはほとんど終わった.今、我々は円のパイスライスを作成する必要があります.以前、あなたが我々が作っているきれいなパターンを見たならば、あなたは何かに気がつくかもしれません:

それは、わずかに回転する格子のスタックです.別の観測、グリッドの各広場に5つのパイスライスがあります.包みましょう
def main():
    for i in range(5):
        drawGrid(tess, 100)
        tess.left(18)

main()
行単位:
def main():
我々は宣言するmain 関数は、コードを保持します.これは必須ではありませんが、コードを整理します.
 for i in range(5):
5つのパイスライスを覚えています?はい、私たちは何度も繰り返されます.このfor ループは5回繰り返します.
drawGrid(tess, 100)
コールdrawGrid を返します.tess タートルオブジェクトとして100 正方形の側の長さとして.
tess.left(18)
グリッドを描くと18 度左.あなたは疑問に思うかもしれません18 由来?我々を回す90 度それぞれの正方形を描画した後.我々は5グリッドを描画しているので、各グリッドが描画された後、ターンアングルを得るために分割します.90 // 5 = 18 .
最終コード
# pretty-picture.py
import turtle

tess = turtle.Turtle()
wn = turtle.Screen()

tess.speed(10)
tess.pensize(2)
tess.color('blue')
wn.bgcolor('lightgreen')

def drawSquare(t, sz):
    for i in range(4):
        t.fd(sz)
        t.left(90)

def drawGrid(t, sz):
    for i in range(4):
        drawSquare(t, sz)
        t.left(90)

def main():
    for i in range(5):
        drawGrid(tess, 100)
        tess.left(18)

main()
これをさらに洗練し、タートルセットアップコードをmain 関数.私は、このチュートリアルが問題解決にあなたを助けたことを望みます.問題は最初は難しく見えましたが、それを小さなビットに変えることは複雑さを減らしました.詳細については、次のリソースをチェックアウトします.
追加リソース
Turtle Library Documentation
Runestone Interactive
PexelsからのIVA Mu