### 問題:
手続きを定義しなさい。引数には `method`と`path`を受け取る。
`method` は `GET`, `POST`, `HEAD`, `PUT`などの文字列である。
path は `/` から始まる任意の文字列である。 (`"/"` だけの場合もありうる)
返り値は `[status, contents]` からなるリスト/配列とする。
`status`は`"200 OK"`, `"404 NotFound"`などの文字列である。
`contents`は、method, path の関係ごとに紐付けられた文字列である
以下の要件を満たすように実装せよ。
```
GET "/hello" → ("200 OK", "こんにちは")
GET "/bye" → ("200 OK", "さよなら")
POST "/bye" → ("200 OK", "ばいばい")
該当なし → ("404 NotFound", "ないです")
```
処理とデータは可能な限り分離せよ。
`if (path == "/hello") 〜 elseif (path == "/bye")`のように、条件文にマジックナンバーが含まれるコードは望ましくない。
## 回答
```python
def procedure(method,path):
methods={'GET':1,'POST':2}
paths={'/hello':1,'/bye':2}
if method not in methods:
if path not in paths:
return ['404 NotFound','ないです']
result=['200 OK']
post=False
if methods[method]==2:
post=True
if paths[path]==2 and not post:
result.append('さよなら')
elif paths[path]==2 and post:
result.append('ばいばい')
else:
result.append('こんにちわ')
return result
GET "/hello" → ("200 OK", "こんにちは")
GET "/bye" → ("200 OK", "さよなら")
POST "/bye" → ("200 OK", "ばいばい")
該当なし → ("404 NotFound", "ないです")
routes = {
"/hello": {
"GET": "200 OK", "こんにちは",
}
"/bye": {
"GET": ("200 OK", "さよなら"),
"POST": ("200 OK", "ばいばい"),
}
}
if (method, path) in routes:
else
return ("404 NotFound", "ないです")
assert procedure("POST", "/hello") == ['404 NotFound','ないです']
```