otaniteruaki / menta_python

0 stars 0 forks source link

課題1について #1

Open otaniteruaki opened 3 years ago

otaniteruaki commented 3 years ago

課題1:簡単な検索ツールの作成

説明動画:https://youtu.be/fFaErYaPIdk

この課題はif文などを使用してリストから特定要素を検索して取得するためのものです。 この課題がクリアできれば主要構文であるif for list は習得できたといえるでしょう。

課題

1.入力したキーワードで、キャラクターリスト(source)を検索して、存在すれば存在する旨を、存在しなければ存在しない旨をPrint文で表示してみましょう 2.1に追加して結果が存在しなかった場合に、キャラクターリスト(source)に追加できるようにしてみましょう 3.2に追加してキャラクターリスト(source)をCSVから読み込んで登録できるようにしてみましょう 4.3に追加してキャラクターリスト(source)をCSVに書き込めるようにしてみましょう

### 検索ツールサンプル
### これをベースに課題の内容を追記してください

# 検索ソース
source=["ねずこ","たんじろう","きょうじゅろう","ぎゆう","げんや","かなお","ぜんいつ"]

### 検索ツール
def search():
    word =input("鬼滅の登場人物の名前を入力してください >>> ")

    ### ここに検索ロジックを書く

    print("{}が見つかりました".format(word))

if __name__ == "__main__":
    search()

予備知識

input()とは?

input("好きな文字を入力してください") のように、input() 関数の引数に文字列を指定すると、入力フィールドの前に表示されます。入力してもらいたい文字の説明などを指定しましょう。このような文字列は、プロンプト と言います。

使い方

  1. input() 関数で入力した文字列を変数 string に代入し、
  2. 変数 string を print()関数で出力します。
string = input("文字列を入力してください:")
print("文字列", string, "が入力されました。")

.format()とは?

以下のように文字列の中に、波かっこ{}で囲まれた「置換フィールド」を埋め込み、format( )メソッドの引数で{}の部分を置換します。

使い方

>>> line = "{0}さんの身長は{1}cm、体重は{2}kgです。".format("山田", 190, 105.3)
>>> print(line)
山田さんの身長は190cm、体重は105.3kgです。

.if name == "main":

直接そのスクリプトを実行した時だけ処理される。 (importなどで、モジュールとして直接以外で使用する場合は処理が実行されない)

otaniteruaki commented 3 years ago

ファイルの入力(読み込み、取り込み)

全文データを一括取り込み「.read()」

ファイルは「開く」「読み込む」「閉じる」の手順で行う 1.開く:f = open(ファイルパス, "r", encoding="utf-8") 2.読み込む:f.read(() 3.閉じる:f.close()

例: f = open("input/donation_202004.txt", "r", encoding="utf-8") donations = f.read() f.close() print(donations)

for donation in donations: print(donation)

1行ずつリスト要素として取り込む場合「.readlines()」を使う

f = open("input/donation_202004.txt", "r", encoding="utf-8") donations = f.readlines() f.close()

for donation in donations: print(donation.strip()) #改行を削除するために、「.strip()」を使用する

※文字列の後ろに .strip() をつけると末尾の改行文字を除去できる ※数値は文字列として読み込まれるので、計算するときは数値に変換する→ .int()

close()忘れを防ぐために、with文で書く

with open('input/menu.csv', encoding='utf-8') as f:
    # 開いた内容を読み込む
    contents = f.read()
    # 表示する
    print(contents)

withを利用する場合、with以降はif文と同じようにインデントをつけてブロックにします。 このwith文のブロックが終わるとPythonが自動でファイルを閉じてくれますので、 close() メソッドを書く必要がありません。

otaniteruaki commented 3 years ago

ファイルの出力(書き込み、書き出し)

基本

with open('output/output.txt', 'w', encoding='utf-8') as f:
    f.write('hello, world\n')
print('書き込み完了')

追記

with open('output/output.txt', 'a', encoding='utf-8') as f:

otaniteruaki commented 3 years ago

CSVファイルからデータを取り込み、処理し、出力する事例

プログラムの説明

予約・利用状況ファイル input/books.csv の各行にカンマ(,)区切りで 日付(yyyy-mm-dd)、 予約者名、 会議室の利用目的 の順に入力されています。 各行は日付順に並べられています。

input/books.csv:

2015-01-02,後藤拓也,Staff mtg
2015-01-03,丸山貞子,Python-勉強会
2015-01-04,平野幸子,PHP-勉強会
2015-01-06,平野幸子,PHP-勉強会
2015-01-07,原田麻美,Python-勉強会
2015-01-08,横山久美子,その他
〜以下、省略〜

会議室の利用目的が、Python-勉強会の行のみをファイル'output/book_python.csv'に出力する

模範解答

output_rows = []

with open('./input/books.csv', encoding='utf-8') as f:
    for row in f:
        columns = row.strip().split(',')
        purpose = columns[2]  # 会議室の利用目的

        if purpose == 'Python-勉強会':
            output_rows.append(row)

# ファイル'output/book_python.csv'へ書き込む
with open('output/book_python.csv', 'w', encoding='utf-8') as wf:
    for row in output_rows:
        wf.write(row)