見出し画像

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

16時間目 今まで学習したメソッドと演算子で図形を描く

こんにちは!20年ほど前のMicrosoftのPCゲーム「Age of Empires Ⅱ」にドはまりしているヒラバヤシヤスキです。

今回も、前回同様に演習ですね。

星の方向をランダムにする

まずは、15時間目で作った星空プログラムの星の方向を様々にするようです。

これは、とっても簡単。ひとつランダム関数を増やして、その値をright()にいれれば良さそうです。
d=randint(0,36) ※別に36°でなくてもよいけど、36°ですべての方向をカバーできる(はず)
right(d)
を追加しました。

from turtle import*
from random import*
bgcolor('black')
pencolor('white')
shape('turtle')
shapesize(1,1)
for i in range(30):
   penup()
   a=randint(-300,300) #x座標
   b=randint(-300,300) #y座標
   c=randint(1,100) #星の大きさ
   d=randint(0,36) #星の方向
   goto(a,b)
   right(d)
   pendown()
   for i in range(5): #4回繰り返す
       forward(c)
       right(144) #右に144°曲がる

つづいて、星の色をカラフルに

ただ、色を付けるのであれば、リストを作成すればよいのですが、こんかいはこんな注文が…。

では 、星 に 色 を 付 けてみましょう 。次 の 表 にわり 算 のあまりを 算出 する 演算子 えんざんし があります。 その 演算子 を 使 って 各 10 個 の 赤 ・ 白 ・ 黄 の 三色 の 星 を 描 いてみましょう。

※画像はテキストより引用

割り算は、普通の割り算のほかに、商とあまりを出すための演算があるんですね。
たしかに、割り算は一つの計算式で商とあまりの2つの値が出てきてしまったり、無限小数になったりと、コンピュータにとっては、なかなか「/」は使いづらいのかもしれません。

今回はあまりを算出する演算子を使うということなので、「%」を使います。例えば、

7%3 は7÷3のあまりなので、1
26%3 は26÷3のあまりなので、2

といった具合ですね。

「%」をつかって、赤、白、黄を各10個ずつ、ということなので、ランダムにしてしまってはダメで、for関数のカウントを割れば良さそうです。

先ほど作ったプログラムに、
①色リストをつくる
②変数eを、for関数のカウントを3で割ったあまりと定義する
③ペンの色を、②で指定した番号の①の色にする

の3つを加えれば良さそうです。

こんな感じでしょうか?

from turtle import*
from random import*
bgcolor('black')
pencolor('white')
shape('turtle')
shapesize(1,1)
iro=['red','white','yellow'] #①色リストを作る
for i in range(30):
   penup()
   a=randint(-300,300)
   b=randint(-300,300)
   c=randint(1,100)
   d=randint(0,36)
   e=i%3 #②for関数のカウントを3で割ったあまり
   goto(a,b)
   right(d)
   pencolor(iro[e]) #③ペンの色を指定
   pendown()
   for i in range(5):
       forward(c)
       right(144)
  

実行してみます…!

うまくできました!

if~elif~else を使うパターン

最後に、上記のプログラムを、色リストを使わずにif文バージョンを書きます。
つまり、あまりで条件分岐をすればよいので、先ほどの①~③の代わりに
ⅰ 変数eを、for関数のカウントを3で割ったあまりと定義する
ⅱ eの値に応じて条件分岐させ色を指定する
 とすれば良さそうです。

こんな感じですね!

from turtle import*
from random import*
bgcolor('black')
pencolor('white')
shape('turtle')
shapesize(1,1)
for i in range(30):
   penup()
   a=randint(-300,300)
   b=randint(-300,300)
   c=randint(1,100)
   d=randint(0,36)
   e=i%3
   goto(a,b)
   right(d)
   if e==0: #あまり0なら赤色
       pencolor('red')
   elif e==1: #あまり1なら白色
       pencolor('white')
   else: #その他(あまり2)なら黄色
       pencolor('yellow')
   pendown()
   for i in range(5):
       forward(c)
       right(144)
  


本日は以上です!



【今回の学び】
・割り算は、「/」以外に、商を求める「//」やあまりを求める「%」がある
 -割り算は、割り算は一つの計算式で商とあまりの2つの値が出てきてしまったり、無限小数になったりと、コンピュータとしては扱いずらいため?
【未解決の疑問】
・kame=turtle と kame=turtle.Turtle() は同じ働きをする。テキストではあえて後者なのはなぜか?
・長い動画をアップする方法はあるか?
・undo()の挙動が良くわからない
 (どの時点までやり直し?)


「かめののろい」の目次

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


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