見出し画像

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

17時間目 今まで学習したメソッドを駆使して図形を描く②

こんにちは!家電量販店で無限に時間をつぶせるヒラヤバヤシヤスキです。

今回も先日に続いて演習です。
こんな図形たちを描くようです。

※テキストより引用

たのしそう…!
ですが、星空の課題が一つ最初にあるので、そちらをまずやってしまいます。

星空の色もランダムにする

最初の課題は、
「16時間目で作ったプログラムの色指定を、(個数を限定せずに)randintとリストを使ってかく」
です。
ちなみに16時間目はこちら。

リストを使わなければ、僕が16時間目に書いた「test16_3.py」を変数eを以下のように変えれば良さそうです。
元々 : e=i%3
変更後:3=randint(0,2)

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=randint(0,2) #eをrandintにする。もともとは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)
  

今回はリストを使うので、以下を使えば良さそうです。
col=['red','white','yellow'] 
e=randint(0,2)
pencolor(col[e])

from turtle import*
from random import*
bgcolor('black')
pencolor('white')
shape('turtle')
shapesize(1,1)
col=['red','white','yellow'] #colでペンの色を定義
for i in range(30):
   penup()
   a=randint(-300,300)
   b=randint(-300,300)
   c=randint(1,100)
   d=randint(0,36)
   e=randint(0,2) #colの番号をランダムで指定する
   goto(a,b)
   right(d)
   pencolor(col[e]) #ペンの色をeの値に応じて変える
   pendown()
   for i in range(5):
       forward(c)
       right(144)

実行した結果、上記の2つのパターンともうまくいきました!

正n角形の実験 円に近づける

さて、次は、14時間目で作った、正n角形を書く「test14-3.py」を修正して、正n角形の形の変化を観察します。

テキストに従って「test14-3.py」を修正すればよいのですが、僕が作った「test14-3.py」がテキストとすでにズレているので、今回も同じ結果がでるように自分自身で作ります…笑
テキストを読むと、つまりは、
「正三角形~正三十角形まで描く。ただし、25角形目は赤色で。」
というプログラムのようです。

ということで、以下のように作りました。

from turtle import *
shape('turtle')
shapesize(2,2)
penup()
goto(-40,-300)
pendown()
for n in range (3,31): #三角形スタートで三十角形まで書くので
   for i in range(n): #n角形の辺の数はn個なので回繰り返す
       if n==25: #二十個角形目は赤色
           pencolor('red')
       else:
           pencolor('black')
       forward(50)
       left(360/n) #n角形の外角は360°÷n

実行!

うまくできました!

正二十五角形 を 超 えたあたりから 円 に 限 りなく 近 くなります。

これも確認できますね。赤色の部分が正二十五角形です。

タイトル画像でも書きましたがなんだか、2003年の東大入試問題、
「円周率は3.05より大きいことを示せ」を思い出しますね!
あれは、正八角形とか正十二角形で証明できた記憶があります。

うずまきを書くプログラムをつくる

最後の課題はこちら!

円 に 近 くなる 性質 を 使 って 「うず 巻 き」 を 描 くプログラムを 考 えてみまし ょう 。正三十角形 の 外角 は、 360÷30=12°
「中心 からほんのちょっと 進 んで12° 向 きを 変 え」 のくり 返 しを200 回 くらいくり 返 すと 「うず 巻 き」 が 描 けるはずです。 さあ 挑戦 してみてください。

こちらもテキストにヒントが書いてありますので、一応載せておきます!

①カメのおまじない2 行 で
② 変数 kyo を 宣言
③for 文 で200 回 くり 返 す 宣言
④'kyo'ピクセル 進 め
⑤ 右 に12° 向 きを 変 え
⑥ 変数 'kyo'は 外 に 行 くほど 0.2 ピクセル 長 くしたいので kyo=kyo+0.2

どうやら、(①が2行なので)たった7行で書けるらしいです。

①のカメのおまじないは、
from turtle import*
shape('turtle')
ですね。

②の「kyo」というのは、距離のことだと思います。
kyo=0
で宣言。

for i in range(200):

forward(kyo)

right(12)

kyo=kyo+0.2

になりますね。これをくっつければ出来上がり、のはずです。

from turtle import*
shape('turtle')
kyo=0
for i in range(200):
   forward(kyo)
   right(12)
   kyo=kyo+0.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時間目 自動計算とループ処理で多角形を書く


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