プログラミング入門II
2024.06.26
モジュール その2
まずは,前回の演習問題の解答例のリンクを張る作業を忘れておりましたこと,おわびします.すみませんでした. 全体的には出来は良かったと思うのですが,一部にまだまだ間違いが出続けています.また,本体とモジュールのアップロードが逆になっているケースが見られました.そこで,今回の課題では提出場所だけでなく,課題としても別に作っていますので,注意してください. エラー: b2333 b2348 b2361 本体とモジュールのアップロード逆?: b1923 b2206 b2306 b2317 b2333 b2359 本体なし: b2323 b2351 モジュールなし: b2324 モジュールの方に学生番号と名前なし: b2337 b2345 b2356 以下は例によって問題のあるプログラムの例です.参考にしてください.
print(f'Calcuration of pi to item {x + 1}, prime number {lst[y]:4}: {math.sqrt(num * 6)}')
相変わらず綴りの間違いが後を絶ちません.しっかり英語の方も意識するか,コピペするかしてください.
b = (count * 6) ** 1/2 |
今回厄介だったのが上の書き方でした.何が問題なのか,わかりにくいと思いますので,下に例を示します.
import math print((2 * 3) ** .5) print((2 * 3) ** 1/2) print(math.sqrt(2 * 3)) |
上のようなプログラムを実行すると,結果は以下になりました.
2.449489742783178 3.0 2.449489742783178 |
0.5 乗は正しく動作していますが, 1/2 乗は間違っています.動作としては,2x3 の1乗をまず計算して,それから2で割るとなっていますね.べき乗で分数を使用する場合にはカッコでくくってください.
m = 2 **2 / (2 ** 2 - 1) for n in range(1,i): m *= s[n] ** 2 / (s[n] ** 2 - 1) |
昨年の解答例では 2 の場合だけ分けましたが,今回特に分ける必要もないですし,分けない方がすっきり書けます.
def b2310(num): if num < 2: return False if num == 2: return True if num % 2 == 0: return False for i in range(3, int(math.sqrt(num)) + 1, 2): if num % i == 0: return False return True |
if でひたすら場合分けですか? 少なくとも, if の連発ではなく,elif にはしましょう.
pi = sum(((-1) ** (i % 2)) / p for i, p in enumerate(primes)) |
上の例では逐次掛けていくという作業ではなく,単発で値を求めていますので,当然円周率に近づいていくことはありませんし,値も大きく違っています.
さて,今回も出てきてしまいました絶対にやっちゃダメ!なやつ.素数を探すことをプログラムで行って楽をしようというのに,自分で素数を探したんでは意味がありません.
def num_pri(n) : lst_pri = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149] return lst_pri[n] |
lst = [] s_lst = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29,31, 37, 41, 43, 47, 53, 59, 61, 67, 71,73, 79, 83, 89, 97, 101, 103, 107, 109, 113,127, 131, 137, 139, 149] num = 2 ** 2 / (2 ** 2 - 1) i = 3 while math.sqrt(num * 6) < 3.14: count = 0 for j in range(2, i): if i % j == 0: break else: prime = i num *= i ** 2 / (i ** 2 - 1) lst += [math.sqrt(num * 6)] i += 1 num = random.randint(25,35) print(f'Calculation of pi to item {num}, prime number {s_lst[num-1]}: {round(lst[num-2], 5)}') |
モジュールについていろいろと学習しました.基本的には教科書にある通りですが,実際の開発作業では必須のものではあるものの,一人で作業しているときにはあまり有難味を感じないのも事実です.これまでに作りためたプログラムを活用していくようなことを少し取り入れていければと思います.
今回もモジュールです.引き続き演習問題を通して学習していきましょう.
今回の演習問題です.
いつものようにレポート提出システムを利用します.授業当日の18:00から閲覧可能で,締切りは翌週月曜日の10:00です.
クラスや継承はオブジェクト指向言語では重要なのですが,これも短いプログラムを作っていく作業であれば,あまり効果を実感できません.そこで,次回は簡単な例外処理を体験することにしましょう.教科書の p.341 - 353 を予習してきてください.