山内セミナー(2018/10/10)

関連サイトと資料

講義中に試したプログラム

test1.py
print('おらおらおら')

test2.py
x = 100
y = 3.14
z = x + y
    
print(z)

test3.py
# コメント
a = 2
b = 3
c = a + b
print(a, "+", b, "=", c)
d = float(input("何か入力してください:"))
print(d)
print(type(d))
print(8 // 3)

test4.py
x = int(input('整数をにゅうりょくしてください:'))
print(x)
if x > 0:
    print('0 より大きい!')
elif x == 0:
    print('0と等しい!')
else:
    print('負の場合!')

test5.py
def Hello():
    print('こんにちは')
	
def odd_or_even():
    for i in range(10,0,-1):
        if i % 2 != 0:
            print(i,"は奇数です。")
        else:
            print(i,"は偶数です。")
	
odd_or_even()

サンプルプログラム(1)

変数に型はありません。また、宣言する必要もありません。他のプログラム言語と同様に、四則演算その他の計算ができます。計算結果は、print文を使えば表示できます。

20171004a.py
x = 100
y = 3.14
z = x + y
	
print(z)

サンプルプログラム(2)

ソースプログラムのファイル名に日本語を使うこともできます。ただし、拡張子は半角文字で「.py」とする必要があります。 以下のプログラムには、4つほど理解していただきたいことがあります。

  1. まず、ユーザー定義関数です。平方根やsinなどのように、システムにあらかじめ用意されている関数はシステム関数などと呼ばれ、 ユーザーのプログラムからいつでも呼び出すことが可能です。それに対して、ユーザーが作成した関数をユーザー定義関数と呼んで、 区別します。以下のプログラム内で、「def odd_or_even():」から「odd_or_even()」の1行前までがユーザー定義関数です。 関数内に含まれる命令文は、「def add_or_even():」よりもインデントを1つ多くつける必要があります。 C言語だと「{」と「}」で囲むのですが、Pythonではそれをインデントで表します。
    関数定義の1行目は「def 関数名(引数1,引数2,...):」と記述します。従って今回の場合、関数名はodd_or_even、引数は無しということになります。 関数は定義しただけでは実行されません。呼び出す必要があります。最終行の「odd_or_even()」が関数を呼び出している箇所です。
  2. 次に、固定回数の繰り返しです。C言語のfor文に相当します。以下のプログラムでは、関数内の「for i in range(11):」以降が相当します。 関数と同様に、繰り返し対象となる命令文は「for i in range(11):」よりもインデントを1つ多くつける必要があります。 ちなみに今回の場合、制御変数iは0からrange関数に指定した引数「10」よりも1少ない数まで1ずつ増えていきます。すなわち、10回の繰り返しになります。 C言語で表記すると「for (i = 0; i < 10; i++)」となります。
  3. 3つ目に、if文です。「if i % 2 != 0:」は、「iを2で割った余りが0と等しくない」という条件が満たされた時に、 次の行から始まるインデントを1つ多くつけたブロック命令文(今回はprint文が1つ)を実行するということになります。 「else:」の部分については説明するまでもありませんね。
  4. 最後に、format文です。これは、変数の値と文字列を結合して、文字列にするものです。 最も簡単な使い方は、format関数の引数として並べた変数に対して0から番号が振られるので、文字列中に変数の値を埋め込みたい箇所に{番号}と書くことです。 詳細は、「関連サイトと資料」にあるリンク「【Python入門】format関数で文字列の書き方」をクリックしてみてください。

奇数と偶数を判定.py
def odd_or_even():
    for i in range(10):
        if i % 2 != 0:
            print("{0}は奇数です。".format(i))
        else:
            print("{0}は偶数です。".format(i))
	
odd_or_even()

引数があるユーザー定義関数を使ったサンプルプログラムを示します。mathモジュールで定義されている円周率を使うので、プログラム冒頭で「import math」としています。

円の面積を求める.py
import math
	
def calcArea(r):
	area = r * r * math.pi
	return area
	
r = 10
print("半径{0}の円の面積は{1}です。".format(r, calcArea(r)))

演習問題(1)

二次方程式の解を求める.py
import math
	
def solve_QuadraticEquation(a, b, c):
	#この関数の中身を作ってください。
	#解の表示も関数内で行ってください。
	
a1 = 10
b1 = 30
c1 = 10
print("a={0}, b={1}, c={2}の場合(2つの実数解):".format(a1, b1, c1))
solve_QuadraticEquation(a1, b1, c1)
	
print("")
	
a2 = 10
b2 = 20
c2 = 10
print("a={0}, b={1}, c={2}の場合(重解):".format(a2, b2, c2))
solve_QuadraticEquation(a2, b2, c2)
	
print("")
	
a3 = 10
b3 = 20
c3 = 30
print("a={0}, b={1}, c={2}の場合(虚数解):".format(a3, b3, c3))
solve_QuadraticEquation(a3, b3, c3)

上記プログラムの出力が以下の図のようになるように、ユーザー定義関数「solve_QuadraticEquation(a, b, c)」の中身を作成せよ。

二次方程式の解を求める.py(解答例)
import math
	
def solve_QuadraticEquation(a, b, c):
	D = b*b - 4*a*c
	
	if D > 0:
		x1 = (-b + math.sqrt(D))/ (2 * a)
		x2 = (-b - math.sqrt(D))/ (2 * a)
		print("解は {0} と {1} です。".format(x1, x2))        
	elif D == 0:
		x = -b / (2 * a)
		print("解は {0} です。".format(x))        
	else:
		re = -b / (2 * a)
		im = math.sqrt(-D) / (2 * a)
		print("解は {0} + {1} i と {0} - {1} i です。".format(re, im))
	
a1 = 10
b1 = 30
c1 = 10
print("a={0}, b={1}, c={2}の場合(2つの実数解):".format(a1, b1, c1))
solve_QuadraticEquation(a1, b1, c1)
	
print("")
	
a2 = 10
b2 = 20
c2 = 10
print("a={0}, b={1}, c={2}の場合(重解):".format(a2, b2, c2))
solve_QuadraticEquation(a2, b2, c2)
	
print("")
	
a3 = 10
b3 = 20
c3 = 30
print("a={0}, b={1}, c={2}の場合(虚数解):".format(a3, b3, c3))
solve_QuadraticEquation(a3, b3, c3)

演習問題(2)

かつて「3の倍数と3が付く数字のときだけアホになります」という芸で世界を震撼させたがいた。 彼へのオマージュをこめて、以下のプログラムが「3の倍数と3が付く数字のときだけその横に(アホ)と表示する」ために欠けている関数の中身を作ってください。

世界のナベアツ.py
def contain3(target):
	#この関数の中身を作ってください。
	#与えられた数targetに3が含まれる場合はTrue、
	#そうでない場合にはFalseを返すようにしてください。
	
def Nabeatsu(n):
	msg = ""
	for i in range(1,n+1):
		if i % 3 == 0 or contain3(i) == True:
			s1 = "{0}(アホ) ".format(i)
			msg = msg + s1
		else:
			s1 = "{0} ".format(i)
			msg = msg + s1
	
	return msg
	
n = 100
print(Nabeatsu(n))

世界のナベアツ.py(解答例)
def contain3(target):
	while target > 0:
		if target % 10 == 3:
			return True
		target = target // 10
	
	return False
	
def Nabeatsu(n):
	msg = ""
	for i in range(1,n+1):
		if i % 3 == 0 or contain3(i) == True:
			s1 = "{0}(アホ) ".format(i)
			msg = msg + s1
		else:
			s1 = "{0} ".format(i)
			msg = msg + s1
	
	return msg
	
n = 100
print(Nabeatsu(n))