「かめののろい」でPython #7時間目(2/2)
7時間目 for と変数でturtleをさらにさらに操ってみる④のつづき
こんにちは!ヒラバヤシヤスキです。
今日は昨日の続きからです!
◆ 次 はスクリーン 中心 を 円 の 中心 として 半径 100 ピクセルの 円 を 描 く 方 法 を 考 えてみよう。
① 新 しいファイル"test07-2.py"を 作 る。
②カメを 出 現 させる
③スクリーン 中心 から 100 ピクセル 前 進 させる。
④カメを 90° 上 向 きにする。 (下 向 きにしない)
⑤カメを 100 ピクセルの 半径 で 円 を 描 く。
とのこと。この指示に従って、プログラムをはじめから書いてみます。
#test07-2-1
#②カメを出現させる
import turtle
kame=turtle.Turtle()
kame.home()
kame.shape('turtle')
kame.shapesize(2,2,2)
#③スクリーン中心から100ピクセル前進させる
kame.forward(100)
#④カメを90°上向きにする
kame.left(90)
#⑤100ピクセルの半径で円を描く
kame.circle(100)
これくらいであればサクサクかけるようになってきました!
実行します。
久しぶりのGIF動画です笑 中心に見えないのはごめんなさい笑
そして、真ん中の線が気になりますが、これは
turtle.penup #ペンをあげなさい!
turtle.pendown #ペンをさげなさい!
というコマンドで解決できるそうです。
#②カメを出現させる
import turtle
kame=turtle.Turtle()
kame.home()
kame.shape('turtle')
kame.shapesize(2,2,2)
kame.penup() #ペンをあげなさい!
#③スクリーン中心から100ピクセル前進させる
kame.forward(100)
kame.pendown() #ペンをさげなさい!
#④カメを90°上向きにする
kame.left(90)
#⑤100ピクセルの半径で円を描く
kame.circle(100)
お、線がなくなってきれいな円になりました。
スクリーンの中心から五重円を描くプログラムにも挑戦!
では、 スクリーンの 中心 から for 文 を 使 って、 5 重 丸 を 描 くプログラム をファイル 名 は"test07-3.py"で 書 いてみましょう。
課題が出たので、ノーヒントでかけるか挑戦します。
import turtle
kame=turtle.Turtle()
kame.home()
kame.shape('turtle')
kame.shapesize(2,2,2)
kame.penup()
kame.forward(40)
kame.pendown()
kame.left(90)
hankei=[40,60,80,100,120]
iro=['red','blue','tomato','lime','black']
for a in range(5):
kame.pencolor(iro[a])
kame.circle(hankei[a])
これでどうかな!?実行!(静止画です)
こ、コレジャナイ感…笑
もっとこう、中心が同じ5つの円になってほしいですよね笑
うーん、たぶん、カメさんが円を書き終わって右端にきたら20pixelさらに右にずれてから、また円を描き始める、というのを繰り返せば良さそうなので、こんな感じかな?
import turtle
kame=turtle.Turtle()
kame.home()
kame.shape('turtle')
kame.shapesize(2,2,2)
kame.left(90)
hankei=[40,60,80,100,120]
iro=['red','blue','tomato','lime','black']
for a in range(5):
kame.penup()
kame.forward(hankei[a])
kame.pendown()
kame.pencolor(iro[a])
kame.circle(hankei[a])
実行!
ど、どこにいくカメさん笑
もっとこれじゃない感が笑
気を取り直して、しっかり考えます!
まず、カメさんの暴走を反省すると…。
①円を描き終えたら、右に90を向いてからカメさんを進めるべきだった(今回、そのまま上方向に進んでしまった)。また、進んだ後は、左を向かせる。そうしないと円の方向がそろわない。
②kame.forward(hankei[a])だと、どんどん進む距離が大きくなる
なので、kame.forward(20)でよい。
これらを踏まえて、もう一度書き直します。
import turtle
kame=turtle.Turtle()
kame.home()
kame.shape('turtle')
kame.shapesize(2,2,2)
#半径と色の変数リストをセット
hankei=[40,60,80,100,120]
iro=['red','blue','tomato','lime','black']
#まず40前進させておく
kame.penup()
kame.forward(40)
kame.pendown()
kame.left(90)
for a in range(5): #aには0~4の4つが順番にはいっていく
#円を描く
kame.pencolor(iro[a]) #iroリストのa番目の色が入る
kame.circle(hankei[a]) #hankeiリストのa番目の値が入る
#次の円を描く準備
kame.penup()
kame.right(90)
kame.forward(20)
kame.left(90)
kame.pendown()
実行します!(静止画です)
今度は、(カメさんの位置が微妙ですが)いい感じです。
と、自分なりの解答ができたところで答え合わせをします。
テキストの解答はこんな感じ!
#五重円を描く例1
import turtle
kame=turtle.Turtle()
kame.home()
kame.shape('turtle')
kame.shapesize(2,2,2)
hankei=[40,60,80,100,120]
for a in hankei:
kame.penup()
kame.home() #カメさんをホームポジションに
kame.forward(a) #hankeiのa番目の距離前進
kame.pendown()
kame.left(90)
kame.circle(a)
これが解答例の1です。ずいぶんすっきりしています。
turtle.home() はこういう使い方ができるんですね。
試しに実行してみると…
カメさん…!超人(?)的な動きです笑
そして、解答例その2
#五重円を描く例2
import turtle
kame=turtle.Turtle()
kame.home()
kame.shape('turtle')
kame.shapesize(2,2,2)
hankei=40
for a in range(5):
kame.penup()
kame.home() #カメさんをホームポジションに
kame.forward(hankei)
kame.pendown()
kame.left(90)
kame.circle(hankei)
hankei=hankei+20 #hankeiに+20します
変数hankeiをはじめ40と定義して繰り返すたびに20ずつ足していくわけですね、なるほど!
動きは解答例1と同じだったので、省略します。
これにて7時間目は終了です。
今回もお読みいただきありがとうございました!
【今回の学び】
・カメさんの動きをかなり詳細に想像してから作らないと、とんでもないプログラムに仕上がる
・同じ結果を求めるのに、本当にたくさんのやり方がある。よりシンプルなものを考えるのが楽しい!
・まだ for文の構文があいまいになることがある
- rangeをもちいるパターンと、変数リストをいれるパターンの違い
・カメさんは超人的な動きができる
【未解決の疑問】
・kame=turtle と kame=turtle.Turtle() は同じ働きをする。テキストではあえて後者なのはなぜか?
・長い動画をアップする方法
「かめののろい」の目次
0時間目 まずパソコンにPythonをインストール
1時間目 IDLEを起ち上げ まずはコマンドラインでカメさん登場
2時間目 楽してカメさん エディターを使いこなそう!
3時間目 変数(箱)を使ってturtleを操ってみる
4時間目 同じ命令の繰り返しfor を使ってturtleを操ってみる
5時間目 for を使ってturtleをさらに操ってみる②
6時間目 for を入れ子にしてturtleをさらに操ってみる③
7時間目 for と変数でturtleをさらにさらに操ってみる④
8時間目 randomを使ってturtleを操ってみる①
9時間目 randomを使ってturtleをさらに操ってみる②
10時間目 条件文if elseともう1つのくり返しwhileで数当てゲームを作る
11時間目 条件文ifとelif・elseでおみくじを作る
12時間目 おみくじの結果でカメがよろこぶ
13時間目 座標(ざひょう)を操って多角形を書く
14時間目 座標(ざひょう)を操って多角形を書く②
15時間目 今まで学習したメソッドを駆使して図形を描く①
16時間目 今まで学習したメソッドと演算子で図形を描く
17時間目 今まで学習したメソッドを駆使して図形を描く②
18時間目 同じ模様の書き方をアルゴリズムのちがいで書いてみる
19時間目 inputを使って大きさのちがう複雑な図形を描いてみる
20時間目 少し複雑な図形を描いてみる
21時間目 変数とfor・if文で少し複雑な図形を書いてみる
22時間目 図形から離れて少し遊んでみる
23時間目 関数を作って遊んでみる
24時間目 自動計算とループ処理で多角形を書く
この記事が気に入ったらサポートをしてみませんか?