confirm(message: str) -> bool
という任意の文章を引数に取り、それに対する回答がyesかnoかを真偽値で返す関数を書きました。
Python
1def confirm(message: str) -> bool: 2 return input(f"{message} [y/n] ").lower()[0] == "y"
何度か実行して気づいたのですが、うっかり空白のままエンターキーを押してしまうと[0]
に値するものがないためにIndexError: string index out of range
が送出されます。
そこで、非空白の入力が行われるまで繰り返し問い続けるように例外処理を使ってみたのですが、うまく機能しません。
具体的には、1度でも空行のままの入力があると(except
文が実行されると)返り値がNone
になります。
再帰的に呼び出す形になっているのが問題なのかと目星を付けてはいるのですが、どうすればよいかが分かりません。
よろしくお願いします。
Python
1# 例外処理版 2def confirm(message: str) -> str: 3 try: 4 response = input(f"{message} [y/n] ").lower()[0] 5 except IndexError: 6 confirm(message) 7 else: 8 return response == "y" 9 10res = confirm("") 11print(f"{res}") 12 13> [y/n] 14> [y/n] y 15> None
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/06 14:12 編集
退会済みユーザー
2019/12/06 20:07