6時間目タイトル

「かめののろい」でPython #6時間目


6時間目 for を入れ子にしてturtleをさらに操ってみる③

こんにちは!ヒラバヤシヤスキです。
大学の友人秋山ウテ(彼の影響でnoteを始めました)のnoteにちょろっと紹介してもらいました、うれしー^^


さて、今日は6時間目です。今回も引き続きfor文を扱います。

前回の最後にこんな課題がありました。

【挑戦】下 の 図 のようにするにはどうしたらよいか 考 えてみよう。 "test06- 3.py"に 書 き 加 えてみよう。

6時間目の最初は、この課題の解答例から始まりました。ファイル名は「test06-5.py」とします。

#5時間目の最後の課題の解答例
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 a in range(4):
   for i in hankei:
       kame.circle(i)
   kame.right(90)
まず for a の 値 が0から3までの 4 回 くり 返 しますが、 最初 の 0 の 時 ① の for 文 で 変 数 hankei のリスト 分 で5 重 丸 を 描 き、 書 き 終 えたら 右 に 90° 向 き、 ②の for a に 戻 り①の for i で 5 重 丸 を 描 き、 書 き 終 えたら 右 に 90° 向 く 動 作 をあと 2 回 くり 返 して 終 了 します。
ずいぶんすっきりしたプログラムになりました。 for 文 の 中 に 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]
#変数iroに4つの要素リストをセット
iro=['red','blue','pink','black']
for a in range(4):
   kame.pencolor(iro[a]) #色を変える
   for i in hankei:
       kame.circle(i)
   kame.right(90)

これを実行すると…。

おー、うまくいきました。発色が良くないですが、赤⇒青⇒ピンク⇒黒の順番で五重円を描いています。
iro=['red','blue','pink','black'] で、
変数「iro」に、0番目:赤、1番目:青、2番目:ピンク、3番目:黒、というリストをセットしているんですね。
そのあとの、
for a in range(4):
では、「a」に0~3の4つを順番に入れて4回繰り返すので、
kame.pencolor(iro[a]) には、a=0のとき赤が、a=1のとき青が・・・と4色が順番に入るってことですね!すごい!!


さて、テキストに戻ると…

◆ここからは、 カメさんとしばらくさようならして、 for 文 をくわしく 勉 強 をします。

だそうです笑
for文は難しいので、理解を深めるためのようです。

まず、テキストに従って、下記プログラムを書き、「for01.py」とします。
「print」という新しいコマンドが出てきますが、()の中身を表示するコマンドです。

#for01.py
#coding:utf-8
a=0
kazu=[10,20,30]
for i in kazu:
   print('a=',a) #aの中身を表示
   print('i=',i) #iの中身を表示
   print('kazu[a]=',kazu[a]) #kazuの中身を表示
   print() #一行空ける
   a=a+1 #a+=1 でも可能
print('終わります')

※#coding:utf-8は、日本語が文字化けしないためのおまじないだそうです。
※テキストだと、print('kazu[a]=',kazu[a])の「,」が抜けていたので書き足しています。

これを実行すると、どのようになるかを予想してください。


a=ほにゃらら
i=ほにゃらら
kazu[a]=ほにゃらら
という表示が何回か繰り返されそうですね。

そんなに難しくはないので、解答を見てみます。

このnoteでは実験をしながらfor文を習っていったので、この結果はすんなり理解できました。

さて、6時間目は以上です!

が、せっかく、for文で複数の変数を扱える(今回の例でいうと「hankei」と「iro」)ことを習ったので、前回の課題の僕の最終的な解答をブラッシュアップしたいと思います!
(カメの向きはどうでもよかったのですが、やはりこだわりたい笑)

前回の解答はこちらでした。
この解答では最初の五重円を独立して書くところが冗長でした。

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)

今回、複数の変数が扱えるようになったので、以下のように書き直してみました。

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]
#変数kakuに4つの要素リストをセット
kaku=[90,90,90,0]
#五重円を描く
for kaisu in range(4):
   for i in hankei:
       kame.circle(i)
   #五重円を描いたら、kaku[kaisu]の値で右に回転
   kame.right(kaku[kaisu])

ちょっとだけすっきりしましたね!
kaku=[90,90,90,0]とリストをつくった上で、
kame.right(kaku[kaisu])と回転を命令することで、
最後の右回転を0度(つまり回らない)にすることができました

ただ、90を3回書いているところが、まだ冗長に感じますので、まだブラッシュアップできそう。


コマンドへの理解が深まると、いろいろ試してみたくなるところにプログラミングの楽しさを感じました!

今度こそ、終わります!お読みいただきありがとうございました!

【今回の学び】
・for 文を重ねる構造をfor文の「入れ子構造」というらしい
・関数の中で、変数リストの番号を指定することで、中身を呼び出して使うことができる。
 例えば、
 iro=['red','blue','pink','black'] で
 a=0としたとき、
 kame.pencolor(iro[a]) は、kame.pencolor('red')となる 
・色々と実験するのはやはり楽しい!
【未解決の疑問】
・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時間目 自動計算とループ処理で多角形を書く


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