5時間目3

「かめののろい」で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時間目 自動計算とループ処理で多角形を書く


この記事が気に入ったらサポートをしてみませんか?