#author("2021-10-27T10:36:51+09:00","default:takataka","takataka") #author("2021-10-27T10:37:43+09:00","default:takataka","takataka") * 応用プログラミング及び実習 2021年度 ex05 [#xa9b83a6] //&color(red){''工事中''}; #contentsx **注意 [#ib719427] notebook のセルを実行していると,たまにセルの番号のところが [*] となったままで反応が返ってこなくなるときがあります. ありがちな状況と対処法を書いときます + 単に処理に時間がかかってるだけ → 待てばいい + input( ) が入力待ってる → 入力欄になんか入力して Enter + いつまで待ってもだめ → ウィンドウ上部の「■」ボタンを押して,そのセルの実行を強制的に停止させる ** ex05A [#kadaiA] [[ex05kadaiA.ipynb>https://github.com/takatakamanbou/AProg/blob/main/ex05kadaiA.ipynb]] + 上記のリンク先から notebook ファイルをダウンロードして開く -- notebook の扱い方を忘れたひとは [[こちら>../Setup#part2]] + そこに記された指示にしたがって notebook を編集・実行して保存 + その notebook ファイルを以下の提出場所へ提出 ''注意'': 文章をきちんと読んでもらえばわかりますが, P2 のところに書いてある「文字列を入力したら,単語内の文字をひっくり返して出力してくれるようにする問題を考えます」というのは,P2の最終目標ではなく,この課題と次の課題(ex05B)全体での目標です. P2 で(またはP4までで)「文字列を入力したら,単語内の文字をひっくり返して出力してくれる」処理を完成させろと言っているわけではありません. 提出場所: [[この科目の Moodle コース>https://www-tlab.math.ryukoku.ac.jp/moodle/course/view.php?id=5]] の「ex05課題A」 ** ex05B [#kadaiB] ex05A のつづきで,文字列を入力したら単語内の文字をひっくり返して出力してくれるプログラムを作りましょう. 名前は ex05reverse.py としてください(''名前間違えないように''). *** step1 [#u5a410d8] 次のような関数 reverseSentence() の定義を書いて,動作確認しよう. - 関数名は reverseSentence - 引数は1つ(文字列),戻り値は文字列 - 実行例(1) S1 = " ぼく ほげお \tほげ ほげ〜\n" R1 = reverseSentence(S1) print(R1) くぼ おげほ げほ 〜げほ - 実行例(2) print(reverseSentence("sihT si a .nep")) This is a pen. - ヒント: 部分文字列ごとにひっくりがえす.「ex05 Notebook その3」思い出そう. *** step2 [#l0f62b73] プログラムの末尾に,次のコードを挿入して実行しよう.読み込むファイルはこちら: [[ex05msg.txt>AProg:ex05msg.txt]] #pre{{ fn = "ex05msg.txt" with open(fn, "r", encoding="utf-8") as f: # ファイル名 fn のファイルを読み込みモードで開く for line in f: # ファイルから1行ずつ読み込んでループ print(line) # そのまま表示 }} 上記の for 文の中を修正して,読み込んだファイルの各行に reverseSentence() を適用した結果を出力するようにしてください. //&size(8){なんかのりでほげおに新たな設定が爆誕...}; *** step3 [#p8f8df2e] プログラムの末尾に次のようなコードを追加して動作確認しましょう(姓名や学籍番号は自分ので). 確認できたら,提出しましょう. #pre{{ myID = "A01055 ほげ ほげお" # 学籍番号,姓,名を空白区切りで print(reverseSentence(reverseSentence(myID))) }} 提出場所: [[この科目の Moodle コース>https://www-tlab.math.ryukoku.ac.jp/moodle/course/view.php?id=5]] の「ex05課題B」 **ex05S (omake) [#kadaiS] //&color(#ff0000){工事中}; &color(red){''これはおまけ課題です.やらなくても減点はありません.やったら棒茄子?''}; - 以下の説明にしたがって作ったプログラムのファイルを提出してください - 期限と提出場所: 1104木の授業終了までに Teams チャットで takataka へ - 高橋のところで「数理情報セミナー」やってるひとは「おまけのおまけ」のところまで含めてすでにやってるので,残念ながらこの課題を提出しても点数は付きません ''画像処理してみよう'' &ref(http://www-tlab.math.ryukoku.ac.jp/~takataka/course/AProg/blackuni3.png,nolink); //&color(#ff0000){工事中}; + 以下では OpenCV という,''コンピュータビジョン''(コンピュータに人間のような視覚をもたせる方法を考える研究開発分野)のためのライブラリを利用します.次のようにしてインストールしてください(macのひとはpip3). pip install opencv-python + 以下では OpenCV という,''コンピュータビジョン''(コンピュータに人間のような視覚をもたせる方法を考える研究開発分野)のためのライブラリを利用します.次のようにしてインストールしてください. pip3 install opencv-python + 上記の画像を手元に保存しなさい. + 次のプログラムを実行しなさい.ファイル名は ex05S.py としよう. #pre{{ import cv2 # OpenCV モジュール # 画像の読み込み img = cv2.imread('blackuni3.png') if img is None: print('File Not Found') print(img.shape) # 正しく読み込めたら, img は NumPy の3次元配列になる(カラーの場合) # 画像を表示 cv2.imshow("hoge", img) cv2.waitKey(0) # 画像を表示したウィンドウ内で何かキーが押されるまで待つ # 画像を書き込み cv2.imwrite("hoge.png", img) }} + 上記の画像とは別の画像を使って実行してみよう. + 上記を書き換えて遊ぼう.ただし,次の処理を必ず行うこと.情報収集は「opencv python ほげ」でウェブ検索したりがよいだろう. -- 左右and/or上下反転 -- 色反転(画素値を反転させる) -- ググると bitwise_notを使う方法が出てくるでしょう.それを使う場合,それでなぜ画素値の反転ができるのかを考えて,コメントとして書いてください -- bitwise_not を使わない場合,「255から元の画素値を引く」で実現できます.こちらのやり方する場合も,それでなぜできるのかをコメントに書きましょう -- 画像の大きさを変える -- 適当に上記のもの以外の何か面白い処理を追加 (おまけのおまけ)カメラ付きのPCまたはウェブカメラを持ってるひとは,以下のプログラムを実行してみるとよいでしょう. #pre{{ import cv2 cap = cv2.VideoCapture(0) while(True): rv, frame = cap.read() cv2.imshow('hoge', frame) if cv2.waitKey(1) == ord('q'): break cap.release() cv2.destroyAllWindows() }}