「かめののろい」でPython #5時間目(2/2)
5時間目 for を使ってturtleをさらに操ってみる② つづき
こんにちは、ヒラバヤシヤスキです。
前回は5限目が途中で終わってしまったので、続きからです。
それでは、早速始めていきましょう。
前回は「5重円をfor i in range で描く」ということをしました。
その次は、for i in range の挙動の実験を行うようです。
僕は前回、先んじて行ってしまいましたが、テキストに従って実験をします。
4時間目でつくった四角形を描くプログラム、「test05.py」を書き換えます。
「test05.py」
#カメさん登場
import turtle
turtle.shape('turtle')
#カメの大きさは、はば2倍、長さ2倍、りんかく2倍
turtle.shapesize(2,2,2)
turtle.color('green')
#カメの輪郭と軌道は赤色で
turtle.pencolor('red')
for i in range(4):
turtle.forward(200)
turtle.left(90)
このrange(4)を、range(1,4)とし、「test05-2.py」とします。
#カメさん登場
import turtle
turtle.shape('turtle')
#カメの大きさは、はば2倍、長さ2倍、りんかく2倍
turtle.shapesize(2,2,2)
turtle.color('green')
#カメの輪郭と軌道は赤色で
turtle.pencolor('red')
#ここを変える
for i in range(4):
turtle.forward(200)
turtle.left(90)
このプログラムは、range(1,4)は開始が1、終わりが(4-1=)3なので、
「200進め!」と「左を向け!」は1,2,3の計3回しか命令されず、最後の辺は描かれません。四角形にするためには、range(1,5)とするか、range(0,4)としなければいけません。
※画像はテキストより引用
range (101, 105) にするとどうなるでしょうか?
これも、101,102,103,104の4回繰り返す、ということでrange(1,5)と同じ結果ですね(数字が大きいからと言って、カメさんがたくさんの距離動いたりはしません!)。
rangeの挙動を確認したところで、5重円のプログラムに戻ります。
「test06-1.py」に追記し、「test06-03.py」とします。
import turtle
kame=turtle.Turtle()
kame.shape('turtle')
kame.shapesize(2,2,2)
kame.color('green')
kame.pencolor('red')
#変数hankeiに5つの要素リストをセット
hankei=[40,60,80,100,120]
#hankeiのリストの順に値を変数iに代入
for i in hankei:
#半径iの値(px)の円を描く
kame.circle(i)
#ここまではtest06-1.pyと同じ
kame.right(90)
for i in hankei:
kame.circle(i)
1つめのfor文の繰り返し部分は字下げのところまでということらしく、実行をすると、
五重円を描く→90°右向きに向く→五重円を描くとなりました。
5限目の最後は課題のようです!
【挑戦】下 の 図 のようにするにはどうしたらよいか 考 えてみよう。 "test06- 3.py"に 書 き 加 えてみよう。
※画像はテキストより引用
素直に考えれば、以下をあと2回書き足せばOKですね。
kame.right(90)
for i in hankei:
kame.circle(i)
実行すると予想通り、解答と同じ結果がとなりました。
(ちなみに、長い動画GIFだとアップロードに失敗してしまうようですので、youtubeに挑戦したのですがうまくいかず…。)
別解を考えてみると、for文の中にfor文を入れて書けば良さそうです。
hankei=[40,60,80,100,120]
for kaisu in range(1,5):
for i in hankei:
kame.circle(i)
kame.right(90)
5重円を描く→右を向くというfor文が、range(1,5)で4回繰り返されます。
ただ…これだと最後にカメが右を向いて、正解とはなりません。
正解とするには、最後に kame.left(90)を追記して、左を向かせる必要があります笑
hankei=[40,60,80,100,120]
for kaisu in range(1,5):
for i in hankei:
kame.circle(i)
kame.right(90)
#最後に左を向かせないといけない笑
kame.left(90)
もしくは、最初の5重円を描くfor文だけ、外に出して以下のようにすればよさそうです。
import turtle
kame=turtle.Turtle()
kame.shape('turtle')
kame.shapesize(2,2,2)
kame.color('green')
kame.pencolor('red')
#変数hankeiに5つの要素リストをセット
hankei=[40,60,80,100,120]
#最初の五重円は独立して記述
for i in hankei:
kame.circle(i)
#のこりの3回をfor文で繰り返し。kame.right(90)は円を描く命令の前に記述。
for kaisu in range(1,4):
kame.right(90)
for i in hankei:
kame.circle(i)
こちらもこちらで、すこし冗長に感じます。そのうち、「if文」をやると思うので、そうしたらもう少しきれいになるのでしょうか?
どちらも満点ではありませんね。でも解答としては正解なんじゃないでしょうか?笑
【今回の学び】
・for 文は字下げの部分が繰り返される。見やすくしようと字下げしたりすると、思わぬ動作をするかも。
【未解決の疑問】
・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時間目 自動計算とループ処理で多角形を書く
この記事が気に入ったらサポートをしてみませんか?