8時間目タイトル

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

8時間目 randomを使ってturtleを操ってみる①

こんにちは!ヒラバヤシヤスキです!
しばらくfor文を扱っていましたが、8時間目・9時間目はrandomを扱うそう。

from turtle import* でプログラミングを楽にする

と、その前に、import の別の書式(書き方?)を学ぶみたいです。
この書き方であれば、いままで、(kame=turtleと定義したうえで、)「kame.shape('turtle')」などと記述していたのが、kameを書かずに、単に、「shape('turtle')」と記述すれば、同じように動作するようです。

書式はとっても簡単で、最初の「import turtle」を、
「from turtle import*」に変えるだけです。

さっそく実験してみます。IDLE(shell)に、以下のように記述していきます。
(今回は、IDLEをつかっているので、一行ずつ命令&実行をしていきます)

>>> from turtle import*
>>> home()
>>> shape('turtle')
>>> shapesize(2,2,2)
>>> circle(120)

実行します。


無事、カメさんが動作しました!

ちなみに、いままでの書き方だと、

>>> import turtle
>>> kame=turtle #kameにturtleをセット
>>> kame.home()
>>> kame.shape('turtle')
>>> kame.shapesize(2,2,2)
>>> kame.circle(120)

ですね。この記述に対して、新しい記述では「kame」を書く手間が大分省けたのがわかります。

本題!randomを扱います

ランダムは 日本 語 では 乱 数 といい、 規 則 きそく のな い 数 を 範 囲 を 決 めて 発 生 させます。

randomは、エクセルやスプレッドシートでrandam関数として扱ったことはありますが、pythonではモジュールのようです。
モジュールというのは、2時間目で、「命令の塊」と習いましたが、そこの意味とはちょっとずれている気がします。
おそらく、「お道具セット」みたいなモノもあるのでしょう。やりたいことに合わせて、お道具セットを用意して、コマンドを打つことで、その道具が使える、的な。
「turtle」はカメさんのセット「random」は乱数を発生させるためのセットといったところだと思います。
ちなみにテキストでは、

from turtle import *  カメを出すおまじない
from random import *  乱数を出すおまじない

と紹介されています。なるほど!特に小学生高学年や中学生はこれくらいの理解のほうがいいかもしれません。

脱線しましたが、テキストに従って進めていきます!
randomをつかってコードを書きます。
IDLEなので、結果もすぐ出ます。

>>> from random import* #randomのモジュールをセット
>>> randint(1,10)
10 #これは実行結果

randomをインポートしてから、randint(1,10)を実行すると「10」と表示されました。
randint(始まり、終わり)で「始まりから終わりまでの数」のうちランダムで1つ表示させるようです。
今回は「10」が表示されました。
ちなみに、intはinteger(整数)の略ですね。魔力ではないですよ笑

続いて、

連 続 して 10 個 の 乱 数 を 発 生 させるプログラムを for 文 で 書 いてみましょ う。

とのことなので、IDLEに書いてみます。これくらいならちょちょいのちょいですね。

#すでに from random import* でrandomのモジュールは呼び出し済み
>>> for i in range(10):
	randint(1,10)
	
7 #ここから実行結果
4
6
4
1
10
2
1
7
3

「7,4,6,4,1,10,2,1,7,3」の10個の数字が表示されました。

random関数を使ってカメさんを動かす

もうタイトルからして、カオスなことが起きることが容易に想像できますが、テキストに従ってプログラムを書きます。

from turtle import* #カメを出すおまじない
from random import* #乱数を出すおまじない
shape('turtle')
shapesize(2,2)
home()

for i in range(30):
   a=randint(0,360)
   left(a)
   b=randint(-100,100)
   forward(b)

0~360°の範囲で左回転し、-100~100の範囲で進む(-は後退する)するという動作を30回繰り返すプログラムですね。

実行します!


動画の長さの関係で少し短いですが、カオス感が伝われば幸いです笑

range(30)、 a、 b の 数値 を 色々変 えてみるといいですね。 a の 値 をあまり 大 きくするとスクリーンからははみ 出 てしまい、 カメ 行方不明 となります。 bの 値 は 円 の 一周 は 360°なのでそれ 以上 の 数値 を 入 れてもエラーにはなりま せんが 、無意味 です 。他 の 人 と 比 べてみると 面白 いですね。 もし 、同 じ 軌跡 (きせき )があったら 奇跡 (きせき) ですね (笑)

 「カメ行方不明」「無意味です」がじわじわきます笑

さて、このプログラムはもちろん、以下の書き方でも大丈夫だそうです。
for文の中の順番が変わっただけです。

from turtle import* #カメを出すおまじない
from random import* #乱数を出すおまじない
shape('turtle')
shapesize(2,2)
home()

for i in range(30):
  #先に「変数領域」を決める
   a=randint(0,360)
   b=randint(-100,100)
  #次に「動作領域」を決める
  left(a)
   forward(b)

この、「変数領域」と「動作領域」を決めるという書き方は、複雑なプログラムのときに用いることが多いそう。
ところで、今回2つのモジュールを呼び出していますが、2つのモジュールが競合することはないのでしょうか?
つまり、「turtle.shape」も「random.shape」もあったとき「shape」というコマンドはどうなるのでしょうか?
きっとうまくできているのでしょうね!笑

以上で、8時間目は終わります!お読みいただきありがとうございました!


【今回の学び】
・from turtle import* というおまじないで、以降、turtleを記述しなくてもよくなる(randomも同じ)
・randomは乱数を発生させるモジュール
・モジュールは「命令の塊」という意味と「お道具セット」的な意味の2つを指すときがありそう
・「変数領域」と「動作領域」という用語は今後でてきそう。
【未解決の疑問】
・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時間目 自動計算とループ処理で多角形を書く


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