---
# System prepended metadata

title: Untitled

---

### 問題：

手続きを定義しなさい。引数には `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','ないです']

```

