7時間目タイトル

「かめののろい」でPython #7時間目(1/2)

7時間目 for と変数でturtleをさらにさらに操ってみる④

こんにちは!ヒラバヤシヤスキです。
7時間目です。今回は、5重円のそれぞれの円の色を変えるプログラムを作ります。早速課題がでてきました!

①iro に1 色 追加 して5 色 にします。
②iro のリストを 呼 び 出 す 変 数 (箱 )b=0 を 用意 します。 どこに 入 れるか ?
③kame.pencolor(iro[a])だと 同 じ 色 で5この 円 を 描 くので、 a を b に 変 えます。
④1 色 描 いたら2 色 目 にするためリストの 数 値 を1ずつ 増 やしたいので b=b+1をどこかに 置 きます。
それでは 考 えてください。 解 説 は 次 ページ。

「test06-5.py」をコピーし、「test07-1.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]
#変数iroに5つの要素リストをセット
iro=['red','blue','tomato','lime','black'] #①のとおり5色に
b=0
for a in range(4):
   for i in hankei:
       kame.pencolor(iro[b]) #③aをbに変えて記述場所もここに変更
       kame.circle(i)
       b=b+1 #④はここかな?

   kame.right(90)

あってるかなー?実行!!

あ、あれ?1つの五重円を描いて止まってしまいました。
以下のようなエラーがでました。

あー、なるほど、iro[b]がout of range つまり、範囲外になってしまったんですね。
たしかに、bが円を描くたびに+1されるので、最初の五重円を描いているときには、順調に赤(b=0)→青(b=1)→トマト色(b=2)→ライム色(b=3)→黒(b=4)と色を変えましたが、つぎの5重円を描くときには、b=5、つまり6つめの色を参照しようとしたのでエラーになったわけですね。

ということは、「b=0」はbの値をリセットする役割だったんですね。
ということで、b=0を、一つ目のFor分の塊の最後において再チャレンジ!

#ここより上は同じなので省略
iro=['red','blue','tomato','lime','black'] 
for a in range(4):
   for i in hankei:
       kame.pencolor(iro[b])
       kame.circle(i)
       b=b+1
   kame.right(90)
   b=0 #最後にbをリセット

が…。

今度は、bが定義されていません、だと。
変数は先に定義しないといけないんですね。

#ここより上は同じなので省略
iro=['red','blue','tomato','lime','black']
b=0 #とりあえずbを定義
for a in range(4):
    for i in hankei:
        kame.pencolor(iro[b])
        kame.circle(i)
        b=b+1
    kame.right(90)
    b=0 #最後にbをリセット

b=0が2回登場してかっこわるいけど実行!

おー、無事狙い通りになりました!!

それでは、解答を見てみましょう。

(色だけ変えています)

import turtle
kame=turtle.Turtle()
kame.shape('turtle')
kame.shapesize(2,2,2)
kame.color('green')
kame.pencolor('red')
hankei=[40,60,80,100,120]
iro=['red','blue','tomato','lime','black']
for a in range(4):
   b=0 #b=0と定義する&リセット
   for i in hankei:
       kame.pencolor(iro[b]) 
       kame.circle(i)
       b=b+1
   kame.right(90)
  

なるほど!b=0をここに置けば、すっきりするわけですね!

7時間目はまだ続くのですが、達成感が大きいので、本日はこれにて!

【今回の学び】
・変数によって、リストを繰り返し呼び出して用いるときには、変数をリセットするのを忘れてはいけない!
・shellでエラーの内容が出てくるのはありがたいが、英語が苦手な人は少し苦労するかも

【未解決の疑問】
・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時間目 自動計算とループ処理で多角形を書く


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