#author("2020-10-23T09:47:57+09:00","default:takataka","takataka")
#author("2020-10-23T10:25:53+09:00","default:takataka","takataka")
* 応用プログラミング及び実習 2020年度 ex05 [#xa9b83a6]

&color(red){''工事中''};

#contentsx

** ex04A [#kadaiA]
** ex05A [#kadaiA]

[[ex04kadaiA.ipynb>https://gist.github.com/55d93d15b0847ebb17cef44a273ba38d]]
[[ex05kadaiA.ipynb>https://gist.github.com/69e48cac7cc215031c36f7729eecb208]]

+ 上記のリンク先から notebook ファイルをダウンロードして開く
-- リンク先の画面右の方の「Raw」を ''右'' クリックして「リンク先を別名で保存」とかそんなん
+ そこに記された指示にしたがって notebook を編集して保存
-- 以下の「注意」も参照してね
+ その notebook ファイルを以下の提出場所へ提出

提出場所: [[この授業のMoodleコース>https://moodle.media.ryukoku.ac.jp/course/view.php?id=2278]] の  [[ex04A>https://moodle.media.ryukoku.ac.jp/mod/assign/view.php?id=71909]]
(工事中)提出場所: [[この授業のMoodleコース>https://moodle.media.ryukoku.ac.jp/course/view.php?id=2278]] の  [[ex05A>https://moodle.media.ryukoku.ac.jp/mod/assign/view.php?id=71984]]

''注意''
>
notebook のセルを実行していると,たまにセルの番号のところが [*] となったままで反応が返ってこなくなるときがあります.
ありがちな状況と対処法を書いときます
+ 単に処理に時間がかかってるだけ → 待てばいい
+ input( ) が入力待ってる → 入力欄になんか入力して Enter
+ いつまで待ってもだめ → ウィンドウ上部の「■」ボタンを押して,そのセルの実行を強制的に停止させる
<

** ex04B [#kadaiB]
** ex05B [#kadaiB]

ex05A のつづきで,文字列を入力したら単語内の文字をひっくり返して出力してくれるプログラムを作りましょう.
名前は ex05reverse.py としてください(''名前間違えないように'').

+ 右のリンク先のファイルを自分の AProg2020 フォルダ/ディレクトリに保存しましょう.: [[zipdata.txt>AProg:zipdata.txt]]
-- リンクを右クリックして「リンク先を別名で保存」とかそんなん
-- このファイルは,文字コード UTF-8  / UNIX改行コードで作成されたテキストファイルです.
Windows環境の一部のソフトウェア(メモ帳など)で開くと,文字コードを変換できなくて化けちゃうことがあります.
+ ダウンロードしたファイルを VSCode で開いて内容を確認しておきましょう.
+ AProg2020 に,以下の内容のファイル ex04zip.py を作りましょう.
*** step1 [#je16fba9]

文字列を一つ受け取ってそれを逆順にする処理を考えましょう.
プログラム中に次のような関数を定義して,適当な文字列で動作確認してください.

- 関数名: reverseWord
- 引数: 一つ,文字列だと仮定(文字列じゃないものが渡されたときのエラー処理は考えなくてよい)
- 戻り値: 引数で渡された文字列を逆順にした文字列

例えば, reverseWord('ほげ') の戻り値は 'げほ' となります.

#pre{{
#### AProg2020 第4回課題B
for s in L2:
     print(reverseWord(s))
}}
の実行結果は
#pre{{

うい
かおえ
こけくき
}}
です.

### 関数 readZIP() の定義
#      中身は一部知らないこともあるので,現時点では眺めてふーんって感じでよい
def readZIP(fn):
ヒント: 関数の中身は実はめっちゃ単純.「ex05 Notebook その3」思い出そう.
*** step2 [#u5a410d8]

    dZIP = {}       # 空のディクショナリを作る

    #  macOS のひとは,以下の「encoding="utf-8"」の部分はなくて ok
    with open(fn, "r", encoding="utf-8") as f:  # ファイル名 fn のファイルを読み込みモードで開く
        for line in f:  # ファイルから1行ずつ読み込んでループ
            x, y = line.split()   # 空白区切りで分割.1つ目を x に,残り(2つ目)を y に
            dZIP[x] = y           # キー x, 値 y のペアを登録.x, y とも文字列
次のような関数 reverseSentence() の定義を書いて,動作確認しよう.
- 関数名は reverseSentence
- 引数は1つ(文字列),戻り値は文字列
- 実行例(1)
 S1 = "    ぼく    ほげお       \tほげ ほげ〜\n”
 R1 = reverseSentence(S1)
 print(R1)
 くぼ おげほ げほ 〜げほ
- 実行例(2)
 print(reverseSentence("sihT si a .nep"))
 This is a pen.
- ヒント: 
++ 部分文字列ごとに reverseWord 
++ これで何が起こるか試してみたらよいかも
 S1[2] = reverseWord(S1[2])

    return dZIP
*** step3 [#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)       # そのまま表示
}}

# 引数にファイル名を指定して readZIP() を呼ぶ
#    何を引数に指定するかは自分で考えよう.戻り値は郵便番号データのディクショナリ
zip = readZIP( )
上記の for 文の中を修正して,読み込んだファイルの各行に reverseSentence() を適用した結果を出力するようにしてください.

# ディクショナリに対する len() は,キーの数を返す
print(len(zip), "件の郵便番号データを読み込みました")
}}
+ 上記を1箇所だけ修正(コード中のコメント参照,引数にはダウンロードしたファイルの名前を指定しましょう)して,動作確認しましょう.
+ さらにプログラムを修正して, 実行すると次のように郵便番号から住所を検索できるようにしてください
-- 入力の扱い方や終了の条件等は,[[ex04A>#kadaiA]] を参考にしてね
//&size(8){なんかのりでほげおに新たな設定が爆誕...};

*** step4 [#p8f8df2e]

プログラムの末尾に次のコードを追加し,文字列を自分の情報に書き換えて動作確認しましょう.
確認できたら,提出しましょう.

#pre{{
118014 件の郵便番号データを読み込みました
郵便番号を入力してください('q'か'Q'で終了) 1057219
1057219 東京都港区東新橋汐留メディアタワー(19階)
郵便番号を入力してください('q'か'Q'で終了) 1057220
1057220 東京都港区東新橋汐留メディアタワー(20階)
郵便番号を入力してください('q'か'Q'で終了) 0010010
0010010 北海道札幌市北区北十条西(1〜4丁目)
郵便番号を入力してください('q'か'Q'で終了) 9998525
9998525 山形県飽海郡遊佐町直世
郵便番号を入力してください('q'か'Q'で終了) 5202123
5202123 滋賀県大津市瀬田大江町
郵便番号を入力してください('q'か'Q'で終了) 1234567
見つかりません
郵便番号を入力してください('q'か'Q'で終了) q
myID = "A01055   ほげ   ほげお"   #  学籍番号,姓,名を空白区切りで
print(reverseSentence(reverseSentence(myID))
}}
+動作確認をして間違いがないことを確認したら,以下へ提出してください.提出するのは,ex04zip.py です.

提出場所: [[この授業のMoodleコース>https://moodle.media.ryukoku.ac.jp/course/view.php?id=2278]] の  [[ex04B>https://moodle.media.ryukoku.ac.jp/mod/assign/view.php?id=71910]]
(工事中)提出場所: [[この授業のMoodleコース>https://moodle.media.ryukoku.ac.jp/course/view.php?id=2278]] の  [[ex05B>https://moodle.media.ryukoku.ac.jp/mod/assign/view.php?id=71985]]


**ex04S (omake)  [#kadaiS]

//&color(#ff0000){工事中}; 

&color(red){''これはおまけ課題です.やらなくても減点はありません.やったら棒茄子?''};

[[ex04kadaiS.ipynb>https://gist.github.com/8a25200c4876bff44f470f24d2886a73]]


- 上記の notebook を開き,その指示にしたがって編集・実行してください
- 仕上げた notebook ファイルを提出してください
- 提出場所: Classroom 上の [[こちら>https://classroom.google.com/c/MTYxODQ4NzczNzgy/a/MTkwNjMyNjYzODk5/details]] (ファイルをここに提出したら,Teams のチャットで知らせてね)
- 期限: 1027火の授業終了時

この課題のねらい:
- Pythonで初歩的なデータ分析を経験してみる
- ネット上のリファレンス等の情報を自分で収集してプログラムを書く経験をする


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS