このテキストドキュメントには、python3のプログラムスクリプトをテキスト形式で載せて、webからアクセスしようという試みです。 日常のちょっとしたプログラムや物理の計算問題などのプログラムを中心に、料理の簡単レシピのように並べてみようかなと思っています。 ■行がプログラム名と簡単な説明その下の行がプログラム、日本語の文字系は基本はutf-8です、プログラム部分コピーしてpythonのエディターに貼り付けてもらえばpython3で実行できると思っています。ただし、完全なバグ取りはできていません。面白そうなものがあったら動かしてみて下さい。 少しずつ内容を付け加えていきます。「デジタルな一日」ブログなどで紹介したものもあります。最新の4つはchatを使って書いてもらったものです。参考までに、、(2023.7.12 兼子追記) ■houmu.py ホームランボール、150m超え # 初速 v0=39m/s 投げ上げ角kaku=45° のときの軌跡,x、y座標を計算して描く 秒速39m/sはほぼ時速140km/sに近い。力積の計算もしてみた import math import numpy as np import matplotlib.pyplot as plt v0=39 kaku = 45 t = np.linspace(0,5.6,21) x = v0*math.cos(kaku*math.pi/180)*t y = v0*math.sin(kaku*math.pi/180)*t-0.5*9.8*t**2 # print (t,x,y) plt.plot(x,y) plt.xlabel('x(m)') plt.ylabel('y(m)') plt.savefig('home45.png') plt.show() print ('Ft=',0.14*40*math.cos(22.5*math.pi/180)*2,'Ns') print ('F=',0.14*40*math.cos(22.5*math.pi/180)*2/0.0015,'N') ■ v0=10 t=2.2 真上投げ上げのグラフ,2.2秒間を1000で割って、y座標を計算して描く方法 import numpy as np import matplotlib.pyplot as plt t = np.linspace(0,2.2,1001) y=10*t-0.5*9.8*t**2 plt.plot(t,y) plt.xlabel('t(s)') plt.ylabel('y(m)') plt.savefig('maue.png') plt.show() ■棒グラフを描くサンプルコード chatGPTに聞く pandasを使って書いてと言ったので次のように出してくれた。 import pandas as pd import matplotlib.pyplot as plt # データの用意 data = {'果物': ['りんご', 'みかん', 'バナナ', 'ぶどう', 'いちご'], '売上': [100, 50, 80, 120, 70]} df = pd.DataFrame(data) # 棒グラフの描画 plt.bar(df['果物'], df['売上']) plt.xlabel('果物') plt.ylabel('売上') # ファイル保存 plt.savefig('sales_bar_chart.png') plt.show() ■chatGPTで聞いてみた pythonで現在時刻を取得するコード import datetime # 現在の日時を取得する now = datetime.datetime.now() # 結果を表示する print("現在の時刻は", now.strftime("%Y/%m/%d %H:%M:%S"), "です。") このコードでは、datetime.datetime.now()関数を使用して、現在の日時情報を取得しています。そして、strftime()メソッドを使用して、日時情報を指定したフォーマットに変換しています。"%Y/%m/%d %H:%M:%S"は、日時情報を「年/月/日 時:分:秒」の形式に変換するフォーマット文字列です。最後に、print()関数を使用して、現在時刻を表示しています。と教えてくれた。 ■サイコロを振るコードを聞いてみた、bingchat import random min = 1 # サイコロの最小値 max = 6 # サイコロの最大値 roll_again = "yes" # サイコロをふるかどうかを尋ねる変数 while roll_again == "yes" or roll_again == "y": # yesまたはyと答えたらループする print("サイコロをふります...") print("結果は...") print(random.randint(min, max)) # minとmaxの間のランダムな整数を表示する roll_again = input("もう一度ふりますか?(yes / no): ") # もう一度ふるかどうかを入力させる このコードは、サイコロをふるかどうかを尋ねて、yesまたはyと答えたら1から6の間のランダムな整数を表示します。noと答えたらプログラムが終了します。 ■写真のリサイズのプログラム。chatbingで聞く resize.pyとしましょう。 from PIL import Image import matplotlib.pyplot as plt %matplotlib inline #画像の読み込み beautiful_view = Image.open("13.jpg") #13,jpgとした #画像を表示して確認 plt.imshow(beautiful_view) #画像のリサイズ small_beautiful_view = beautiful_view.resize((400,220)) #400,225 でスマホでカメラより横長だった #リサイズした画像を表示して確認 plt.imshow(small_beautiful_view) #リサイズした画像を名前をつけて保存 small_beautiful_view.save("small_view.jpg") #出力される画像 ■count1.py 英文で単語のカウントをします。以前awkでも同じようなスクリプトを書いた # -*- coding: utf-8 -* # python3 count1.py ein2.txt |sort -n -r これで数字の多い順でソートがかかる import sys filename = 'ein.txt' if len(sys.argv) > 1: filename = sys.argv[1] print(filename) count = {} with open(filename) as fh: for full_line in fh: line = full_line.rstrip('\n') line = line.lower() for word in line.split(): if word == '': continue if word not in count: count[word] = 0 count[word] += 1 for word in sorted(count): print("{:10} {:>2}".format(count[word], word)) #formatの中身を逆転すれば単語が先にきます。 参考までにein2.txtの中身 5: Einstein's Clock Rearrangements in atoms produce light of precise energy. Einstein discovered that light consist of particles. The energy of light-particles fixes the rate of vibration. Light can stimulate atoms to emit similar light. Stimulated emission serves in laser in laser beams and atomic clocks. --以下略 結果は561回theが出現という意味です。 561 the 298 of 186 a 180 in 141 and 113 to 84 is 81 that 75 it 69 light 以下略 ■kuji.py random.choiceを使って、くじを引く # -*- coding: utf-8 -* import random omikuji=["大凶 しょげずにがんばって、気分転換も必要!","凶 気をつけて過ごしましょう!","末吉 辛抱強くがんばって!","吉 何か良いことと出会いますよ!","小吉 1つくらい良いことあるでしょう!","中吉 結構、運が向いて来ますよ!","大吉 幸運な一日!"] jan=["ぐー","ちょき","ぱあー"] sai=[1,2,3,4,5,6] takara=["はずれ!","はずれ!","はずれ!","はずれ!","はずれ!","はずれ!","3等300円!","2等1000円!","1等大当たり50000円!"] print (random.choice(omikuji)) print (random.choice(jan)) print (random.choice(sai)) print (random.choice(takara)) ■kepler.py 惑星にケプラー第3法則が成り立つことの確認計算 # -*- coding: utf-8 -* import math def kepler(t,a): return t*t/a/a/a print (""" print ("ここで最初の数値は、周期T(×100日)、次の数値は衛星軌道の半長軸の長さ(天文単位:地球と太陽の距離を1とする)としてある。") print ("ケプラーの第3法則(T^2/a^3)を各惑星に適用した計算") print (" T^2/a^3=",round(kepler(0.880,0.387),5),"水星") print (" T^2/a^3=",round(kepler(2.247,0.723),5),"金星") print (" T^2/a^3=",round(kepler(3.653,1.00),5),"地球") print (" T^2/a^3=",round(kepler(6.870,1.524),5),"火星") print (" T^2/a^3=",round(kepler(43.326,5.203),5),"木星") print (" T^2/a^3=",round(kepler(107.529,9.555),5),"土星") print (" T^2/a^3=",round(kepler(306.885,19.218),5),"天王星") print (" T^2/a^3=",round(kepler(601.824,30.110),5),"海王星") """) print ("ここで最初の数値は、周期T(×100日)、次の数値は衛星軌道の半長軸の長さ(天文単位:地球と太陽の距離を1とする)としてある。") print ("ケプラーの第3法則(T^2/a^3)を各惑星に適用した計算") print (" T^2/a^3=",round(kepler(0.880,0.387),5),"水星") print (" T^2/a^3=",round(kepler(2.247,0.723),5),"金星") print (" T^2/a^3=",round(kepler(3.653,1.00),5),"地球") print (" T^2/a^3=",round(kepler(6.870,1.524),5),"火星") print (" T^2/a^3=",round(kepler(43.326,5.203),5),"木星") print (" T^2/a^3=",round(kepler(107.529,9.555),5),"土星") print (" T^2/a^3=",round(kepler(306.885,19.218),5),"天王星") print (" T^2/a^3=",round(kepler(601.824,30.110),5),"海王星") ■tanso.py 電力、都市ガス、灯油の削減と炭素の排出量の計算 # -*- coding: utf-8 -*import math print (""" 今回はこれを、defファイルを使って書いてみた。 前回書いた、1ヶ月40kWhの削減は大きい値かもしれない。 借りに半分の20kWhとすれば、結論は半分の400万トン になるのか。 さて、ある本によると、削減目標は、基準排出量の6%で これは1223百万トン×0.06=73.4百万トンであるという そうすると、400/7340×100(%)となるがこれは正しいのか。 さて都市ガス換算だと1m3がCO2 2.1kg、灯油では1lが2.5kg であるという。この辺は前回と同様の計算から出るので、ここでは やらないことにする。 print 20*12*47000000*357/10000000000,"万トン" print "これは、削減目標の何%くらいか?" print 20*12*4700*357/1000000 /7340.0*100.0,"%" wepは、電力量の一ヶ月削減 a kWhのとき、 wgpは、都市ガスの一ヶ月削減 b m3(立方メートル)のとき wopは、灯油の一ヶ月削減 c l(リットル)、4ヶ月間のみとするとき def wep(a): return a*12*4700*357/1000000 def wgp(b): return b*12*4700*2100/1000000 def wop(c): return c*4*4700*2500/1000000 print "電力量",wep(20),"万トン" print "これは、二酸化炭素削減目標の何%くらいか?" print wep(20)/7340.0*100.0,"%" print "都市ガス",wgp(1),"万トン" print "これは、二酸化炭素削減目標の何%くらいか?" print wgp(1)/7340.0*100.0,"%" print "灯油",wop(20),"万トン" print "これは、二酸化炭素削減目標の何%くらいか?" print wop(20)/7340.0*100.0,"%" """) def wep(a): return a*12*4700*357/1000000 def wgp(b): return b*12*4700*2100/1000000 def wop(c): return c*4*4700*2500/1000000 print ("電力量",wep(20),"万トン") print ("これは、二酸化炭素削減目標の何%くらいか?") print (wep(20)/7340.0*100.0,"%") print ("都市ガス",wgp(1),"万トン") print ("これは、二酸化炭素削減目標の何%くらいか?") print (wgp(1)/7340.0*100.0,"%") print ("灯油",wop(20),"万トン") print ("これは、二酸化炭素削減目標の何%くらいか?") print (wop(20)/7340.0*100.0,"%") ■constb.py 物理定数表精細 # *- coding: utf-8 -* def main(): pass if __name__ == '__main__': main() print "物理定数表、精細,理科年表2010年版" print""" 重力加速度m/s2: g=9.80665 万有引力定数Nm2/kg2: Gc=6.67428e-11 1気圧Pa: p0=1.01325e5 絶対0度K: k0=273.15 気体定数J/K: R=8.314472 アボガドロ数: Na=6.02214179e23 ボルツマン定数J/K: k=1.3806504e-23 仕事当量J/cal J=4.18605 真空中の光速m/s: c=2.99792458e8 真空の誘電率F/m: ipu=8.854187817e-12 真空の透磁率N/A2: myu=1.2566370614e-6 電子素量C: el=1.602176487e-19 電子質量kg: me=9.10938215e-31 原子質量単位kg: u=1.660538782e-27 プランク定数J/s: h=6.62606896e-34 陽子質量kg: mp=1.672621637e-27 中性子質量kg: mn=1.674927211e-27 水素原子質量kg: mh=1.673e-27 リュードベリ定数Js: Ry=1.0973731568527e7 ボーア半径m: a0=5.2917720859e-11 """ g=9.80665 Gc=6.67428e-11 p0=1.01325e5 k0=273.15 R=8.314472 Na=6.02214179e23 k=1.3806504e-23 J=4.18605 c=2.99792458e8 ipu=8.854187817e-12 myu=1.2566370614e-6 el=1.602176487e-19 me=9.10938215e-31 u=1.660538782e-27 h=6.62606896e-34 mp=1.672621637e-27 mn=1.674927211e-27 mh=1.673e-27 Ry=1.0973731568527e7 a0=5.2917720859e-11 ■tuki1.py 月の位置での地球の重力 # -*- coding: utf-8 -* import math print (""" 地球から60およそ60R離れた月の位置での地球の 重力加速度の計算と、月が地球の周りを公転している 円運動の加速度との一致を検証してみます。 月までの距離を約地球の半径の60倍とし、 月は地球の周りを27.3日等速円運動するとしてみます。 omega=2*3.14/(27.3*24*3600) r=6400*1000*60 a=r*omega*omega print a,"m/s2" 万有引力からの計算 print 9.8/3600,"m/s2" """) omega=2*3.14/(27.3*24*3600) r=6400*1000*60 a=r*omega*omega print (a,"m/s2") print (9.8/3600,"m/s2") ■bane.py バネ振り子の周期などの計算をします # -*- coding: utf-8 -* import math print (""" 物理計算、ばね振り子 ばねの単振動を計算します。ばねの定数kはあらかじめ 測っておきます。k=力/伸び N/m。 さて、単振動の式は 変位x=Asinωt、速度v=Aωcosωt、加速度a=-Aω2sinωt これで、t秒後の速度を計算します。 omega=math.sqrt(0.10*9.8/0.13/0.10) omega1=math.sqrt(0.10*9.8/0.395/0.10) A=0.10 def x(t): return A*math.sin(omega*t) def v(t): return A*omega*math.cos(omega*t) def a(t): return -A*omega*omega*math.sin(omega*t) def x1(t): return A*math.sin(omega1*t) def v1(t): return A*omega1*math.cos(omega1*t) def a1(t): return -A*omega1*omega1*math.sin(omega1*t) print "x=",round(x(0.24),2),"m 変位" print "v=",round(v(0.24),2),"m/s 速度°" print "a=",round(a(0.24),2),"m/s2 加速度" print "T=",round(2*3.14/omega,2),"s 周期" print "vmax速度の最大値=",round(A*omega,2) print "x=",round(x1(0.24),2),"m 変位" print "v=",round(v1(0.24),2),"m/s 速度°" print "a=",round(a1(0.24),2),"m/s2 加速度" print "T=",round(2*3.14/omega1,2),"s 周期" print "vmax速度の最大値=",round(A*omega1,2) """) omega=math.sqrt(0.10*9.8/0.13/0.10) omega1=math.sqrt(0.10*9.8/0.395/0.10) A=0.10 def x(t): return A*math.sin(omega*t) def v(t): return A*omega*math.cos(omega*t) def a(t): return -A*omega*omega*math.sin(omega*t) def x1(t): return A*math.sin(omega1*t) def v1(t): return A*omega1*math.cos(omega1*t) def a1(t): return -A*omega1*omega1*math.sin(omega1*t) print ("v=",round(v(0.24),2),"m/s 速度°") print ("a=",round(a(0.24),2),"m/s2 加速度") print ("T=",round(2*3.14/omega,2),"s 周期" ) print ("vmax速度の最大値=",round(A*omega,2)) print ("x=",round(x1(0.24),2),"m 変位") print ("v=",round(v1(0.24),2),"m/s 速度°") print ("a=",round(a1(0.24),2),"m/s2 加速度") print ("T=",round(2*3.14/omega1,2),"s 周期" ) print ("vmax速度の最大値=",round(A*omega1,2)) ■sengurafu.py コロナ感染者の線グラフの例 %matplotlib inline import pandas as pd df = pd.read_csv("http://www.ne.jp/asahi/yoshikn02/namo/kaneko/nhkdaily.csv", header=0,usecols=[0,3,6],encoding="utf-8") df1=df[7435:7788] df4=df1[-30:] print(df4) df4.plot.line() ■cohaisyutu.py 車の燃費から二酸化炭素の排出量の計算 # -*- coding: utf-8 -* import math,os,sys print ("""ガソリンの密度から燃費の単位換算をします。 ガソリンの密度は、その成分構成比や温度によって変化します。0.73~0.76 g/cm3 としているものもありますが、ここでは0.75g/cm3としてみました 国によってはカタログにCO2排出量を入れている。ガソリンの成分をC5H12としてみる。 """) def nenpig(n): return 750.0/n def tanso(x): return 750.0*220/72/x # ガソリンをC5H12(ペンタン)とする n=10 #日本の10km/Lのときと23km/Lのときの計算 print ("燃費が ",n," km/L のときのガソリン消費質量は",round(nenpig(n),1),"g/km") print ("燃費が ",n," km/L のときの二酸化炭素排出量は",round(tanso(n),1),"g/km") ■bou.py 感染データ集計棒グラフの例 # -*- coding: utf-8 -*- get_ipython().run_line_magic('matplotlib', 'inline') import pandas as pd df = pd.read_csv("http://www.ne.jp/asahi/yoshikn02/namo/kaneko/nhkdaily.csv", header=0,usecols=[0,3], encoding="utf-8") df1=df[7912:7942] df4=df1[-30:] print(df4) df4.plot.bar() dfmax=df4['各地の感染者数_1日ごとの発表数'].max() print("最大=",dfmax) dfsum=df4['各地の感染者数_1日ごとの発表数'].sum() print("合計=",dfsum) dfmean=round(df4['各地の感染者数_1日ごとの発表数'].mean(),1) print("平均=",dfmean) dfmedian=df4['各地の感染者数_1日ごとの発表数'].median() print("中央値=",dfmedian) N=df4['各地の感染者数_1日ごとの発表数'].count() print("データ数=",N) dfmin=df4['各地の感染者数_1日ごとの発表数'].min() print("最小値=",dfmin) ■kansen.py 大阪のコロナ感染拡大予測図 前週比1.7倍の時 import pylab x=pylab.arange(20.)/10 y=800*pow(1.7,x) y1=800*pow(0.8,x) y2=800*pow(1,x) pylab.plot(x,y) pylab.plot(x,y1) pylab.plot(x,y2) pylab.title('大阪府感染者数予測') pylab.xlabel('×7日') pylab.ylabel('感染者') pylab.savefig('osaka') print(y) print(y1) ■uryou.py 掛川のuryouデータcsvを読み込んでグラフ作成例 # -*- coding: utf-8 -*- get_ipython().run_line_magic('matplotlib', 'inline') import pandas as pd df = pd.read_csv("c:\\Users\\yoshi\\Documents\\imypy\\kake218.csv",header=0, encoding="SHIFT_JIS") df.plot.bar(x="年月日",y=["20合計","平年値","21合計"]) print(df) ■htmlka.py テキストファイルを読み込んでhtmlのタグをつける # -*- coding: utf-8 -* import os, sys print ("""
' + y + ' | ') out_f.write('