Python3のstr().isdigit関数は負数を知らないらしい

なんか動作がおかしいなあと思っていたら、isdigit関数の仕様として負数は数値と認めない方針らしいです…なんでやねん~

“-1”.isdigit()はFalseを返す


>>> "-1".isdigit()
False
>>> "1".isdigit()
True
>>> "abcde".isdigit()
False
>>> "1 + 2".isdigit()
False
>>> "123abc".isdigit()
False

str().isdigit()関数は文字列が数値のみで構成されていた場合、Trueを返してくれる便利なイケメンです。私は当然の如く以下のような文を書いて当然のごとくエラーを吐かれて困惑しました…


number = "-50"
assert number.isdigit(), "数値じゃないよ~"
Traceback (most recent call last):
  File "", line 1, in 
AssertionError: 数値じゃないよ~
俺氏
何でや!!

色々調べたらどうやらisdigit()くんは負数は数値ではないと信じ込んでいる…らしいのでもう自分で作りました…

もしかしたら私が気がついていないだけで物凄い遠回りしているのかもしれませんが、見つけられないので自分で作ったほうがはえーわ!!

to_number関数


def to_number(num):
    if num == 0 or isinstance(num, int):
        return num
    elif num.isdigit():
        return int(num)
    else:
        try:
            num = int(num)
        except ValueError:
            print("エラー!!半角数値を入力して下さい。")
            return to_number(input())
        return num


to_number(input())

使い方とか

インタラクティブシェルで遊びましょう。



>>> to_number(123)
123
>>> to_number(-123)
-123
>>> to_number(0)
0
>>> to_number("0")
0
>>> to_number("1")
1
>>> to_number("-1")
-1
>>> to_number("abcde")
エラー!!半角数値を入力して下さい。
to_number("123abc")
エラー!!半角数値を入力して下さい。

コメントを残す

メールアドレスが公開されることはありません。