2019年2月5日火曜日

開発環境

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング (Al Sweigart(著)、相川 愛三(翻訳)、オライリージャパン)の第I部(Pythonプログラミングの基礎)、3章(関数)、3.11(演習プロジェクト)、3.11.2(入力の妥当性検証)の解答を求めてみる。

コード

Python 3

#!/usr/bin/env python3
def collatz(number: int) -> None:
    if number % 2 == 0:
        return int(number / 2)
    return 3 * number + 1


class CustomError(Exception):
    pass


if __name__ == '__main__':
    # n = int(input('整数を入力してください: '))
    # while n != 1:
    #     print(n)
    #     n = collatz(n)
    # print(n)
    for n in [5, -5, 'puppy', -10, 10, 99, 100]:
        print('-' * 10)
        try:
            n = int(n)
            if n <= 0:
                raise CustomError('ゼロ以下の数')
        except ValueError as err:
            print(type(err), err, '整数値を入力してください。')
        except CustomError as err:
            print(type(err), err, '正の整数を入力してください。')
        except Exception as err:
            print(type(err), err)
        else:
            print(f'n = {n}')
            while n != 1:
                print(f'{n:>3d}')
                n = collatz(n)
            print(f'{n:>3d}')

入出力結果(cmd(コマンドプロンプト)、Terminal、Jupyter(IPython))

C:\Users\...> py -3 sample2.py
----------
n = 5
  5
 16
  8
  4
  2
  1
----------
<class '__main__.CustomError'> ゼロ以下の数 正の整数を入力してください。
----------
<class 'ValueError'> invalid literal for int() with base 10: 'puppy' 整数値を入力してください。
----------
<class '__main__.CustomError'> ゼロ以下の数 正の整数を入力してください。
----------
n = 10
 10
  5
 16
  8
  4
  2
  1
----------
n = 99
 99
298
149
448
224
112
 56
 28
 14
  7
 22
 11
 34
 17
 52
 26
 13
 40
 20
 10
  5
 16
  8
  4
  2
  1
----------
n = 100
100
 50
 25
 76
 38
 19
 58
 29
 88
 44
 22
 11
 34
 17
 52
 26
 13
 40
 20
 10
  5
 16
  8
  4
  2
  1
C:\Users\...>

0 コメント:

コメントを投稿