詳細! Python3 入門ノート
Chapter4~5の理解度確認用に取り組んでみました。
解法はこちらの動画を参考にさせて頂きました。
直径2の円に内接する正n角形の辺の長さを求める。
頂点を増やして辺の長さを円周に近似させ、入力値より大きくなることを確認する。
todai_math.py
import math
# [π > 3.05 を証明せよ]
while True:
target_input = input("円周率がいくつより大きいことを証明しますか?")
try: #入力値チェック
target = float(target_input)
except ValueError:
print("数値を入力してください。")
else:
# 入力値が円周率より大きいと無限ループするため入力値をチェック
if target <= math.pi:
break
else:
print("円周率より小さい値を入力してください。")
print("円周率が{}より大きいことを証明する".format(target))
print("")
#正n角形の頂点の初期値を3にセット
n = 3
# breakするまでループさせる
while True:
# 等辺の長さ1、頂角360/nの二等辺三角形の底辺の長さを求める
kakudo = 360 / n
# math関数の三角関数計算ではラジアンを用いるので度→ラジアンの変換が必要
radian_kakudo = math.radians( kakudo )
# 余弦定理から、底辺 x の長さは[x ^ 2 = 1 ^ 2 + 1 ^ 2 + 2 * 1 * 1 * cos(360 / n)]
x = ( 1*1 + 1*1 - 2*1*1*math.cos( radian_kakudo ) ) ** 0.5
# 底辺の長さ * nを円周の近似値 y とする
y = x * n
print("正{0}角形のとき、辺の長さの合計は{1}".format(n , y))
if y / 2 > target: #目標値より大きくなったらブレイクして終了処理へ
break
# 頂点を1つ増やす
n = n + 1
print("")
print("円周率 = 円周 / 直径")
print("")
print("{0} / 2 = {1} > {2}".format(y , y / 2 , target))
print("")
print("よって円周率は{}より大きい".format(target))