「かめののろい」で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時間目 自動計算とループ処理で多角形を書く
この記事が気に入ったらサポートをしてみませんか?