質問

私はPythonに非常に新しいです。私は大学のためにこの形を描く必要がありますが、私はそれが本当に難しいと思うので、私はそのイメージに入る前に正方形をやろうとしています。

とにかくここに私の質問があります:どうすれば8行を持つことができますか? (1列に8つの正方形があります)私は追加し続けることができません def start_point1(): これは適切な方法ではありません。

enter image description here

#!/usr/bin/python

import turtle as t
import time

def start_point():
    t.penup()
    t.setpos(-200,-240)
    t.pendown()

def start_point1():
    t.penup()
    t.setpos(-200,-180)
    t.pendown()

def draw_turtle():
    for a in range(4):
        t.forward(60)
        t.left(90)

def draw_turtlerow():
    for a in range(8):
        draw_turtle()
        t.forward(60)



def main():
    start_point()
    draw_turtlerow()
    start_point1()
    draw_turtlerow()
役に立ちましたか?

解決

この種の問題では、何度も何度も繰り返される「原子」操作が何であるかを自問する必要があります。あなたはすでにあなたの基本的な「原子」を見つけました:正方形の側面を描く:

t.forward(60)

さて、「原子性」の次のレベルは何ですか?さて、サイドを4回繰り返すと、正方形を手に入れることができます(あなたが正しく自分自身を見つけたので)

for a in range(4):
    t.forward(60)
    t.left(90)

同じ行に沿って、上記の8倍を繰り返すとラインが得られ、1行を8回繰り返すと完全なチェックボードが得られるという結論に達するかもしれません。それは次のようなものでなければなりません:

for col in range(8):
    for row in range(8):
        # draw a square here

今、あなたはすでに正方形を描く機能を自分に書きました。唯一の問題は、それぞれを異なる場所に描く必要があることです。ここで焦点を当てなければならない重要なポイントは、次のとおりです。 の値から始まるこの場所を計算する方法を考えていただけますか colrow?

あなたが立ち往生した場合、私はサンプルの実装を投稿しました ここ, 私はあなたがそれをチェックする必要がないと確信しています, 、しかし、もしそうなら、ここに追加の割り当てがあります:そのコードをAs-asに使用する代わりに、内側の円を呼び出しで別の関数に回します draw_square(row, col).

編集: 余分なポイントとプライドのために、一度エクササイズを完了したら、 チェックボード内のほとんどの行が何度も再描画される方法を観察します. 。ほとんどの努力で、プログラムの効率を2倍にすることができます。どう思いますか?

hth!

他のヒント

引数を追加することを検討してください start_point 関数の新しいバージョンを作成する代わりに。例えば:

def start_point(x,y):
    t.penup()
    t.setpos(x,y)
    t.pendown()

これにより、排除できます start_pos1() そして、あなたはコードを再利用しています、それは良いことです。

これらの線に沿って、他の機能にも柔軟性を追加することを検討してください。たとえば、なぜ持っていませんか draw_turtlerow 列に描くためにいくつの正方形を伝える数字を取りますか?次に、必要な行数を取る別の方法を作成できます。この関数は呼び出します draw_turtlerowstart_pos グリッド全体を描くために数回。

これがあなたの課題の正しい方向であるかどうかはわかりませんが、それがあなたに正しい方向を指していることを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top