このサイトでは、プログラミング言語Python(パイソン)を使ったプログラミングのソースコードを紹介しています。
コンテンツごとにGoogle Colaboratoryで利用できるノートブック形式のファイル(ソースコード)を紹介しています。
コピーして、貼り付けて利用して下さい。
Google Colaboratoryは下記のリンクをクリックいて下さい。
https://colab.research.google.com/notebooks/welcome.ipynb?hl=ja
print関数を使って「Hello World!」と表示します。
print("Hello World!")
[ここに入力]の部分を変更し、文字を表示してみよう。
print("[ここに入力]")
a+b a-b a×b a÷b
を計算します。割り算は、少数で表示されます。
a=2
b=3
print(a+b)
print(a-b)
print(a*b)
print(a/b)
aやbの値を変更して計算してみよう。
a=[ここに数値を入力]
b=[ここに数値を入力]
print(a+b)
print(a-b)
print(a*b)
print(a/b)
a÷bの商と余りを計算します。
a=2
b=3
print(a//b)
print(a%b)
2つの数aとbの大小を比較して、大きいほうを求めます。
※貼り付けた後、printの前に「tab」を入力して下さい。
a=4*4*4*4*4
b=3*3*3*3*3*3*3*3
if a>b:
print("aが大きい。")
elif a==b:
print("aとbは等しい。")
else:
print("bが大きい。")
aやbの値を変更して計算してみよう。
a=[ここに数値を入力]
b=[ここに数値を入力]
if a>b:
print("aが大きい。")
elif a==b:
print("aとbは等しい。")
else:
print("bが大きい。")
aの値が0以上のときはaの値を、aの値が負のときは-1をかけて-aを答えます。
a=-3
if a<0:
a*=-1
print(str(a))
aが1000より小さい間、aを3倍し続けます。
aが1000以上になると終了します。
a=1
while a<1000:
print("a="+str(a)+"、まだ足りない。")
a*=3
print("a="+str(a)+"、1000以上です。")
繰り返し文は、無限ループのバグが発生しやすい。コンパイルが成功(文法上のエラーが無くても、)実行したときに、プログラムが止まらないなどのエラーが発生する場合がある。この場合は、強制終了しなければいけなくなる。
2つの自然数aとbについて、ユークリッド互除法を用いて最大公約数を計算します。
a=125
b=256
r=1
if a*b==0:
print("a,bの数値を変更して下さい。")
else:
while r>0:
r=a%b
a=b
b=r
print("最大公約数は、"+str(a))
2つの自然数aとbについて、ユークリッド互除法を用いて最大公約数gを計算した後、積a×bを最大公約数gで割ることで、最小公倍数lを計算します。
a=12
b=9
r=1
ab=a*b
if a*b==0:
print("a,bの数値を変更して下さい。")
else:
while r>0:
r=a%b
a=b
b=r
g=a
l=ab//g
print("最小公倍数は、"+str(l))
2つの有理数a/bとc/dの和を分数で求めます。分母と分子の最大公約数gをユークリッド互除法で計算し、約分をした形(既約分数)で答えを表示します。
※分母の最小公倍数を求める計算は長くなるので省略しています。
a=2
b=15
c=3
d=2
m=a*d+b*c
n=b*d
r=1
if n==0:
print("b,dの数値を変更して下さい。")
elif m==0:
print("a/b+c/d=0")
else:
mm=m
nn=n
while r>0:
r=m%n
m=n
n=r
mm //= m
nn //= m
print("a/b+c/d="+str(mm)+"/"+str(nn))
2つの有理数a/bとc/dの引き算、かけ算、割り算を計算するプログラムを作ってみましょう。
キーボードから入力した名前を文字nameに代入します。
print("What's your name?")
name=input()
print("My name is "+str(name))
print("Oh! "+str(name)+" .Nice to meet you!")
キーボードから入力した名前を文字nameに代入します。
print("What's your name?")
name=input()
print("My name is "+str(name))
print("Oh! "+str(name)+" .Nice to meet you!")
2つの文字aとbにキーボードから入力した数値を代入します。
(注意)input()関数は、入力したデータを「文字型」として処理します。数値として計算したい場合は、int(input())とすることで、入力したデータを「文字型」から「数値型」に変更することができます。
print("aとbの値を入力して下さい。")
a=input("a=")
b=input("b=")
print("a="+str(a)+",b="+str(b))
2つの文字aとbにキーボードから入力した数値を代入します。
aとbに行う(四則)演算を選択して計算をします。
print("aとbの値を入力して下さい。")
a=int(input("a="))
b=int(input("b="))
print("演算を選択して下さい。")
c=int(input("1.+(足し算) 2.-(引き算) 3.*(掛け算) 4./(割り算)"))
if c==1:
c=a+b
print("a+b="+str(c))
elif c==2:
c=a-b
print("a-b="+str(c))
elif c==3:
c=a*b
print("a*b="+str(c))
elif c==4:
c=a/b
print("a/b="+str(c))
else:
print("もう一度入力して下さい。")
データの種類には、数値データの整数を表すint型(イント型)、同じ数値データでも小数を表すfloat型(フロート型)、文字を表すstr型(ストリング型)など、いくつかの型があります。C言語やJava言語では、必ず最初にデータの型を指定しなければいけないのに対して、Python言語は、ある程度ゆるく処理してくれます。(少し難しい話ですが、)思っていた動作と異なる動きをしてしまう場合は、このデータの型が「悪さ」をしていることがあります。
例えば、input()関数でデータを入力すると、データの型は、文字データ(str型)として扱われます。データを数値データとして扱う(計算を行う)場合には、int(input())(または、float(input()))とすることで、データを文字型から、数値型に変更することができます。
数値型によるデータa,bと、文字(str)型によるデータmo,jiの動きの違いを確認します。
a=1
b=2
c=6.54321
mo=str(3)
ji=str(4)
print(a+b)
print("a+b")
print(str(a)+str(b))
print(c)
print(int(c))
print(mo+ji)
print(int(mo)+int(ji))
以下のコードで、ライブラリモジュールに読み込み(インポート)、その中に含まれるランダム関数を利用できるようになります。1~10の整数の中からランダムに一つ値を返すプログラムです。
import random
print(random.randint(1, 10))
下記のページで、詳しく解説されています。
https://ai-inter1.com/python-module_package_library/
独学なので、お行儀の悪いコードとなっていました。少しお行儀よくすると、
import random
a=random.randint(1,10)
print(a)
と書いた方がいいですね。
ランダム関数を利用して、整数1~3を、"グー","チョキ","パー"に置き換えて表示するプログラムです。
import random
a=random.randint(1,3)
if a==1:
print("パー")
elif a==2:
print("チョキ")
else:
print("グー")
自分の手を入力して、じゃんけんします。「勝ち」、「負け」、「あいこ」の結果を判定して、表示します。不正行為は、「負け」になります。
※バグ取り大変です。
テストしたら、4連続「あなたの負けです。」でした。1/81です。
import random #ランダム関数の読み込み
a=random.randint(1,3) #相手の手
print("じゃんけん")
print("(1,2,3のいずれかを入力して下さい。)")
b=int(input("1.(パー) 2.(チョキ) 3.(グー)\n"))
#自分の手を入力します。「\n」は、改行コードです。
if (a-b+3)%3==0:
print("あいこです。")
elif (a-b+3)%3==1:
print("あなたの負けです。")
else:
print("あなたの勝ちです。")
1,2,3以外の入力に対して、「不正行為により、あなたの負けです。」と表示できるようにしました。
勝負判定:(a-b+3)%3==0を何度も繰り返すと冗長なので、c=(a-b+3)%3とおいてしまいます。
import random #ランダム関数の読み込み
a=random.randint(1,3) #相手の手
print("じゃんけん")
print("(1,2,3のいずれかを入力して下さい。)")
b=int(input("1.(パー) 2.(チョキ) 3.(グー)\n"))
#自分の手を入力します。「\n」は、改行コードです。
c=(a-b+3)%3
if b!=1 and b!=2 and b!=3:
print("不正行為により、あなたの負けです。")
elif c==0:
print("あいこです。")
elif c==1:
print("あなたの負けです。")
else:
print("あなたの勝ちです。")
1,2,3以外の入力に対して、「不正行為により、あなたの負けです。」と表示できるようにしました。
同じコードを繰り返している冗長なプログラムです。あまり面白くない。もう少し、コンパクトに省略できそうな気もするが。
import random #ランダム関数の読み込み
a=random.randint(1,3) #相手の手
print("じゃんけん")
print("(1,2,3のいずれかを入力して下さい。)")
b=int(input("1.(パー) 2.(チョキ) 3.(グー)\n"))
#自分の手を入力します。「\n」は、改行コードです。
c=(a-b+3)%3
if b!=1 and b!=2 and b!=3:
print("不正行為により、あなたの負けです。")
else:
while c==0:
print("あいこです。もう一度。\n")
a=random.randint(1,3) #相手の手
print("じゃんけん")
print("(1,2,3のいずれかを入力して下さい。)")
b=int(input("1.(パー) 2.(チョキ) 3.(グー)\n"))
#自分の手を入力します。「\n」は、改行コードです。
c=(a-b+3)%3
if c==1:
print("あなたの負けです。")
else:
print("あなたの勝ちです。")
ベクトルの成分表示のように複数の値をまとめたものを配列といいます。高校数学では、xyzの3次元まででしたが、n(nは有限)個のデータを格納して使うことができます。(2次元の縦(行)と横(列)のデータを行列のように考えることもあります。)
配列に格納されたn個のデータは、順番に0番目~nー1番目のデータとして扱われます。(有限)数列のように考えることもできます。
配列に小さい方から8個の素数の値を格納しました。
格納したデータの各値を順に表示させます。
ループにforを使用しています。whileにすると、無限ループしてしまいます。
list_number = [2, 3, 5, 7, 11, 13, 17, 19]
for sosu in list_number:
print(sosu)
配列に文字"パー","チョキ","グー"を値として格納しました。
格納したデータをランダム関数を利用して、ランダムに表示させます。
配列のインデックス(順番)は、0番から始まるため、ランダムで取り出した1~3の値から1を引いて、インデックスにします。
import random #ランダム関数の読み込み
hand = ["パー", "チョキ", "グー"]
a=random.randint(1,3) #相手の手
aihand=hand[a-1]
print(aihand)
相手の手がわからないのは、味気がないので、配列を用いてパー、グー、チョキを表示しやすくします。(1をパー、2をチョキ、・・と変換する、ちょっとした一工夫です。)
import random #ランダム関数の読み込み
hand = ["パー", "チョキ", "グー"]
a=random.randint(1,3) #相手の手
aihand=hand[a-1]
print("じゃんけん")
print("(1,2,3のいずれかを入力して下さい。)")
b=int(input("1.(パー) 2.(チョキ) 3.(グー)\n"))
#自分の手を入力します。「\n」は、改行コードです。
c=(a-b+3)%3
if b!=1 and b!=2 and b!=3:
print("不正行為により、あなたの負けです。")
else:
while c==0:
print("私は、"+str(aihand)+"です。あいこです。もう一度。\n")
a=random.randint(1,3) #相手の手
aihand=hand[a-1]
print("じゃんけん")
print("(1,2,3のいずれかを入力して下さい。)")
b=int(input("1.(パー) 2.(チョキ) 3.(グー)\n"))
#自分の手を入力します。「\n」は、改行コードです。
c=(a-b+3)%3
if c==1:
print("私は、"+str(aihand)+"です。あなたの負けです。")
else:
print("私は、"+str(aihand)+"です。あなたの勝ちです。")
キーボードから入力したAの座標をax,ayに代入します。
import math
print("Aの座標を入力して下さい。")
ax=int(input("x="))
ay=int(input("y="))
print("A("+str(ax)+","+str(ay)+")") #Aの座標
an=math.sqrt(ax*ax+ay*ay) #OAの長さ
print("OA="+str(an))
print("Bの座標を入力して下さい。")
bx=int(input("x="))
by=int(input("y="))
print("B("+str(bx)+","+str(by)+")") #Bの座標
bn=math.sqrt(bx*bx+by*by) #OBの長さ
print("OB="+str(bn))
ab=ax*bx+ay*by #OAとOBの内積
print("内積:OA・OB="+str(ab))
cosaob=ab/(an*bn) #∠OABのcos
print("cos∠AOB="+str(cosaob))
print("弧度法:"+str(math.acos(cosaob)))
print("度数法:"+str(math.acos(cosaob)/(2*math.pi)*360)+"°")
参考:三角関数・逆三角関数 https://python.atelierkobato.com/sin/
y=x^2とx軸,x=1で囲まれた部分の面積を区分求積法で求める。
nを1桁増やすと,だいたい小数点以下の3が1つ増える。(精度が1桁上がる。)?
<上から近似>
n=100
dx=1/n
sum=0
for k in range(1,n+1,1):
x=k*dx
fx=x**2
sum=sum+fx*dx
print("求める面積は",sum)
<上下から近似>
n=100
dx=1/n
sum=0
tum=0
for k in range(1,n+1,1):
x=k*dx
fx=x**2
sum=sum+fx*dx
t=(k-1)*dx
gx=t**2
tum=tum+gx*dx
print("求める面積Sは",sum)
print("求める面積Tは",tum)
参考:三角関数・逆三角関数 https://python.atelierkobato.com/sin/
(角度を弧度法に変換し、)xが0からπ/2までの間で、sinxと(sinxの近似式)xの値を比較し,誤差を計算しました。
import math
import matplotlib.pyplot as plt
a=90
for k in range(0,a+1,1):
x=k*math.pi/180;sx=math.sin(x)
print("角度",k,"°→弧度法",x,"(rad)","正弦sin",sx,"誤差:x-sinx=",x-sx)
plt.scatter(x,x,marker="o",c="g")
plt.scatter(x,sx,marker="o",c="r")
plt.axis("equal")
plt.show()
プロジェクトについて、詳しくは [hirokami-yusuke@teacher.tym.ed.jp] までお問い合わせください。