14時間目タイトル

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

14時間目 座標(ざひょう)を操って多角形を書く②

遅ればせながら、明けましておめでとうございます。
今年こそは、筋肉をつけて、すらっとした体型になりたいヒラバヤシヤスキです。

さて、久しぶりすぎて、前回がいつで、なにをやったのかあまり覚えていませんが、今日からプログラミングも再開します!

どうやら、前回は、座標を使って四角形を描いたようです。

今回は、(正)五角形など、さらに沢山の図形を描いていくようです。

五角形を描く

多角形を描くにあたっては、外角の大きさを考えると良かったんですね(3時間目参照)。

では、そもそも、外角はどうやって求めるのでしょうか?

これは、中学受験した人は小学生6年生のときくらいに、そうでない人は中学二年生のときにやっているであろう知識の復習ですね!

思い出せれましたか?
どんな多角形でも外角の和は360°という性質を利用すれば1つの外角を求められます。五角形であれば、1つの角は360°÷5になりますね!
(360°÷5=72°まで計算してもよいですが、計算はプログラムにさせれば大丈夫、というか正確なので、ここでは式にとどめています。)

今 回 は 外角 を 使 って 300 ピクセルの 正 五角形 を 描 くプログラムを 作 って みましょう。 使 うメソッドやモジュールは 13 時 間 目 と 同 じです。

ということなので、早速作っていきます。

汎用性を持たせるため、nを定義すればn角形の図形が描けるプログラムにしてみます!!

こんな感じでしょうか?

from turtle import *
shape('turtle')
shapesize(2,2)
penup()
goto(-150,-300) #ここは画面からはみ出なければなんでも良いらしい
pendown()
pencolor('red')
#何角形かを決める
n=5 #今回は五角形
for i in range(n): #n角形の辺の数はn個なので回繰り返す
   forward(300)
   left(360/n) #n角形の外角は360°÷n

実行してみます!

いい感じですね!!nに6を入れれば六角形が描けます!

続いて、

 変 数 を iro にしてリストを 作成 して for 文 で 呼 び 出 してみましよ う。 リストから 呼 び 出 す 方法 は2 種 類 あります。
6 時 間 目 ・7 時 間 目 を 参照 して 自分 に 合 った 方法 でプログラミングしましょう。

とのこと。2種類って何のことだっけ?6時間目と7時間目(1/22/2)を振り返って来ます。

復習完了!
まず2種類とも、変数の色リストをつくる、というところは共通しています。例えば…

iro=['red','blue','tomato','lime','black']

このようにiroリストを作ります。
そのうえで、呼び出す方法は以下の二種類ありました。

#rangeの引数に数字(もしくは数字が入った変数)を入れるパターン
for a in range(5):

#rangeの引数に変数(iro)を入れるパターン
for a in range(iro):

2つめのパターンは完全に忘れていました!
このパターンの場合、iroの変数リストの順番が a に代入されていくことになるんでしたね。今回だと、5色なので、0、1、2、3、4、の5つの数字がaに順番に代入されます!

今回は、1つめのパターンの方がシンプルそうなので、そちらを採用します!

こんな感じになります。

from turtle import *
shape('turtle')
shapesize(2,2)
penup()
goto(-150,-300)
pendown()
iro=['red','blue','tomato','lime','black'] #色リスト作成
#何角形かを決める
n=5 #今回は五角形
for i in range(n): #n角形の辺の数はn個なので回繰り返す
   pencolor(iro[i]) #色リストのi番目の色にする
   forward(300)
   left(360/n) #n角形の外角は360°÷n

実行結果は、こんな感じ。


最後に、

正三角形から正九角形までを描くプログラムを描きます

for 文 の 入 れ 子構造 を 使 い 下図 のように 正三角形 から 正九角形 を 描 くプログラムを 書 いてみよう。

とのことですので、描いてみます。3→4→5→6→7→8→9と、nが変化していけば良さそうですね。

from turtle import *
shape('turtle')
shapesize(2,2)
penup()
goto(-150,-300)
pendown()
pencolor('red')

n=3 #三角形から始まる
for a in range (7): #nは3~9の7種類ある
   for i in range(n): #n角形の辺の数はn個なので回繰り返す
       forward(200)
       left(360/n) #n角形の外角は360°÷n
   n=n+1 #辺の数が増える

それでは実行します!!

いい感じです!!

ちなみにテキストの解答例はこちら!

from turtle import *
shape('turtle')
shapesize(2,2)
penup()
goto(-100,-280)
pendown()
b=0
for i in range (3,10): #iを3から9(=10-1)まで変化させる
   for a in range(i): aはi角形の回数繰り返す(辺ですね)
       forward(200)
       left(360/i)

こちらの方が若干シンプルでしょうか?

本日はこれで終了です!


【今回の学び】
・【復習】for a in range():の引数は、数字を入れてもいいし、変数(リスト)を入れてもよい。
・【復習】for a in range(a,b): は、aが"始まり"、bが"終わり-1"を示す(aとbは数字)
【未解決の疑問】
・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時間目 自動計算とループ処理で多角形を書く


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