

下記の図をfor, while,if構文を使って作成したいのですが、コードがイマイチわかりません。教えていただけないでしょうか？

田んぼの田の字のように2x2のグリッド線が引かれており、更に外周にある4つの辺の各中点から正三角形の線がひとつずつ引かれています。

書いてみたコードは下のようなものです。

[code]

    import turtle def draw4squares(t, size):
        for i in range(4):
            for i in range(3):
                t.forward(size)
                t.left(90)
            t.forward(size)
    
[/code]

**作成したい図**

[![](https://i.stack.imgur.com/rY89p.jpg)](https://i.stack.imgur.com/rY89p.jpg)


CC BY-SA 4.0
2020-01-31T14:52:14.923
62683
2020-02-01T07:05:01.880
2020-02-01T07:05:01.880
3060
37666
question
python
タートルグラフィックでこの図を作成したい


書き方はいくつかあると思いますが、書いていただいたコメントの修正からいきます。  
以下がコメントでいただいたコードの断片だと思います。

[code]

    def draw4squares(t, size):
        for i in range(4):
            for i in range(3):
                t.forward(size)
                t.left(90)
                t.forward(size) 
    
[/code]

図形から「いかにも4回のループ」と気づいたところまでは良かったのですが、亀の向きの制御に手こずったんじゃないかと思います。

コードの修正点は3つです。

  1. 正方形は4辺ありますから、必ず4辺forwardしないと四角が描けません。
  2. 二重のforループはいずれも `i` をとっています。参照はありませんが、 `_` への代入をおすすめします。
  3. 正方形を描いた後は向きに注意です。次のループに行く前に向きを変更する必要があります。

[code]

    def draw4squares(t, size):
        # 使わない添字(i)は_で受ける
        for _ in range(4):
            # 4辺あるので4回forwardしないと四角は書けない
            for _ in range(4):
                t.forward(size)
                t.left(90)
            # 1度四角を書いたら向きを変える
            t.left(90)
    
[/code]

しかし図上の赤の三角形は四角形より手強そうです。四角形一つと三角形だけを見ると一筆書きができそうなので、これをいっぺんに描いてしまうことにしましょう。

[code]

    import turtle
    
    def draw_triangle(t, size):
        # 三角形の三辺の描画
        for rect in (-30, 120, 120):
            t.right(rect)
            t.forward(size)
    
        # もとの向きに戻す
        t.right(150)
    
    def draw4pieces(t, size):
        t.pensize(3)
        t.begin_fill()
    
        for _ in range(4):
            # 正方形の1辺だけ先に描画してしまう。
            t.color('blue', 'green')
            t.forward(size)
    
            # 突き当りで赤ペンに持ち替え三角形を描画。サイズは適当です。
            t.color('red', 'green')
            draw_triangle(t, size * 1.5)
    
            # 最後に三角形の原点に戻ってくるので正方形の残りの辺を描画
            t.color('blue', 'green')
            for _ in range(3):
                t.right(90)
                t.forward(size)
    
            # 帰ってきた亀の向きは開始からちょうど
            # 90度横になったところにあるのでこれでOK!
    
    t = turtle.Turtle()
    draw4pieces(t, 100)
    t.end_fill()
    turtle.done()
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/laecn.png)](https://i.stack.imgur.com/laecn.png)


CC BY-SA 4.0
2020-01-31T16:30:59.520
62685
2020-01-31T16:30:59.520
62
62683
answer