課題¶
課題は順番にこなす必要はありません。面白そうだと思った課題にチャレンジしてみてください。
もちろんこれ以外に自分で課題を持っているならば、それをやってみるのも良いでしょう。
socketモジュールを使ってネットワーク通信¶
socketモジュールを使って足し算を行うサーバを作成してください
telnetコマンドで次のように
整数+整数
のように送信すると足し算の結果を返すサーバを作成してください。> telnet localhost 5000 Trying 127.0.0.1... Connected to debian02. Escape character is '^]'. 10+20 30 123+456 579
Hint
socketモジュールを使って接続を待ち受け、接続されたら Hello, World!
という文字列を返すコードは次のようになります。
server.py:
# coding: utf-8
import sys
import socket
def main():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('127.0.0.1', 5000))
s.listen(5)
try:
while True:
conn, addr = s.accept()
conn.send("Hello, World!\n")
conn.close()
except KeyboardInterrupt:
sys.exit(0)
if __name__ == '__main__':
main()
このスクリプトを実行するとlocalhostのTCP5000番ポートで接続を待ち受けます。
> python server.py
telnetで接続するとHello, World!という文字列が表示されて、切断されます。
> telnet localhost 5000
Hello, World!
Hint
- socketモジュールのドキュメントの例を参考に、サーバ側で受け取ったテキストを改行位置で分割します(“10+20”というデータになります)
- 分割したテキストの一つ目の要素を
+
でさらに分割します(“10”と”20”のデータになります) - 分割したテキストを数値に変換し、足しあわせて、結果を送信します
socketモジュールを使って、1.で作成したサーバにデータを送信して、結果を取得して画面に表示するプログラムを作成してください
引数を渡して実行すると結果を返してくれるようにしてみてください
> python add.py 10+20 30
sqlite3モジュールを使ってデータベース作成¶
sqlite3モジュールを使って、引数で与えられた品名と金額をデータベースに保存するプログラムを作成してください
> python inputdb.py みかん 50 > python inputdb.py りんご 100 > python inputdb.py バナナ 200
Hint
sysモジュールのargvでコマンドライン引数を取得することができます。
http://www.python.jp/doc/release/library/sys.html
sqlite3モジュールでsqlite3のデータベースを操作することができます。
http://www.python.jp/doc/release/library/sqlite3.html
テーブルを作成するSQL: | CREATE TABLE items (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, cost INTEGER); |
---|---|
データを挿入するSQL: | INSERT INTO items(name, cost) VALUES("みかん", 50); |
1で作成したデータベースの内容を一覧表示するプログラムを作成してください
$ python listdb.py みかん 50円 りんご 100円 バナナ 200円
Hint
データを取得するSQL: | SELECT name, cost FROM items; |
---|
引数から入力された金額以上の品物名とその品物の金額を表示してください
> python filter.py 100 100円以上の品物は、 りんご 100円 バナナ 200円
Hint
データを取得するSQL: | SELECT name, cost FROM items WHERE cost >= 100; |
---|
csvモジュールを使ってCSVファイルの読み込みとデータ集計¶
次に示すCSVファイルは、果物屋の品物の売上レポートのデータです。
items.csv:
2012/06/01,りんご,2,100
2012/06/01,みかん,10,40
2012/06/02,りんご,3,100
2012/06/02,バナナ,3,200
2012/06/03,りんご,4,120
2012/06/03,みかん,5,50
2012/06/04,みかん,5,60
2012/06/04,バナナ,4,150
2012/06/05,りんご,1,100
2012/06/05,みかん,10,50
1列目は日付、2列目は品物名、3列目は販売した個数、4列目はその日の品物の1個あたりの価格です。ファイルの文字コードはShiftJIS(CP932)です。
csvモジュールを使ってCSVファイルを読み込み、各品物ごとに合計の数を計算し、画面に表示するプログラムを作成してください
$ python item_report.py りんご 10個 みかん 30個 バナナ 7個
csvモジュールを使ってCSVファイルを読み込み、日付ごとの売上金額を計算し、画面に表示するプログラムを作成してください
> python report.py 2012/06/01 600円 2012/06/02 900円 2012/06/03 730円 2012/06/04 900円 2012/06/05 600円