知Q探究クラブ
ようこそ!
Pythonワークショップ

授業に役立つリンク

①Padlet(パドレット)

https://padlet.com/gyokugan/q-e7mt3s0ghkk6egj5

今回は使いません。

②パワポスライド

知Q探究1 邪馬台国ミステリ!消えた女王の都を探せ

知Q探究2 ガリレオもびっくり!太陽系を体感しよう!

知Q探究3 発見!わが町で採れた野菜で料理のレシピを作ろう!

知Q探究4 未来のマイタウン(琴平町)を考えよう!

かずかたち3

①12月13日 使ったテキスト教材 x.gd/arFrN

②今日使うPython実行環境

Trinket(トリンケット) アカウント不要 https://trinket.io/

OnlineGDB(ジーディービー) アカウント不要  https://www.onlinegdb.com/

m.PIME Python初学者用テキストサイト

https://lecture.m-pime.jp/basic01/

パワポスライドに統一しました。

④太陽系の距離・縮尺計算(名古屋市科学館)

https://www.ncsm.city.nagoya.jp/astro/40m/model.html

⑤Google earth

https://earth.google.com/earth/d/1FOSBbbgSK2zJq3E7u2w4UzPt1sUwGycp?usp=sharing

⑥太陽系シミュレータ(軽量)

太陽系シミュレータ(圧縮ZIPファイル)

 

★今日のコード(プログラム)テキスト

P41 コピーペースト用

import random

naka = 0       # 円の中に入った点の数
zenbu = 10000   # 点の個数(好きな数字に書き換えてもいいよ。ただし、20万個までにして下さい。)

for i in range(1, zenbu+1):
    x = random.uniform(0, 20)    # 0≦ x ≦20の範囲の点の座標をランダムに作る。
    y = random.uniform(0, 20)    # 0≦ y ≦20の範囲の点の座標をランダムに作る。
    #print(f"{i}番目の点は{x, y}")
    if (x-10)**2 + (y-10)**2 < 100:  # 円の中に入る判定。この式は高校数学で学ぶよ。
        naka = naka + 1

print("中に入った点は ", naka, "個")
print("円周率は ", 4 * naka / zenbu, "です。")

#本当の円周率は π = 3.1415926535…

P44 コードテキスト(コピペ用)

# 円周率を求めることをkaisuu回繰り返して、その平均値を求める

pi_list = []
kaisuu = 10

import random

for k in range(1, kaisuu+1):
    naka = 0       # 円の中に入った点の数
    zenbu = 10000   # 点の個数(好きな数字に書き換えよう。ただし、20万個までにして下さい。)

    for i in range(1, zenbu+1):
        x = random.uniform(0, 20)    # 0≦ x ≦20の範囲の点の座標をランダムに作る。
        y = random.uniform(0, 20)    # 0≦ y ≦20の範囲の点の座標をランダムに作る。
        #print(f"{i}番目の点は{x, y}")
        if (x-10)**2 + (y-10)**2 < 100:  # 円の中に入る判定。この式は高校数学で学ぶよ。
            naka = naka + 1
    print("中に入った点は ", naka, "個")
    print("円周率は ", 4 * naka / zenbu, "です。")
    print()
    pi_list.append(4 * naka / zenbu)

print(kaisuu, "回求めた円周率は", pi_list)
print("それらの平均値は ", sum(pi_list)/kaisuu)

P48 コードテキスト(コピペ用)

# ビュフォンの針 GUIなし版

import random
import math

# 投げる針の数を入力
n = 10000
d = 50       # 平行線の幅
l = d / 2    # 針の長さ (2l = d の条件)
    
def buffon_simulation(n, l, d):
    m = 0  # 線と交わった針の数
    
    for _ in range(n):
        y = random.uniform(0, d)
        theta = random.uniform(0, math.pi)
        if y <= l * math.sin(theta):
             m += 1  # 線にかかった
    return m

m = buffon_simulation(n, l, d)
print('投げる針の数 (n): ' + str(n))
print('線と交わった針の数 (m): ' + str(m))

if m > 0:
    pi_approx = n / m
    print('計算した円周率の近似値 (n/m): ' + str(pi_approx))
else:
    print('交わった針がないため、円周率を計算できません。')