質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

2回答

4237閲覧

str.isdecimal()が実行できない (python)

tarou2

総合スコア28

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2018/02/04 00:01

編集2018/02/04 00:02

pythonのインタラクティブシェルで

'234'.isdecimal()

と入力すると、

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'isdecimal'

というエラーが出てきます。
jupyter notebookで同じものを実行するとTrueと返してくれました。

どうして、インタラクティブシェルで実行したときだけ、エラーになるのか教えて
いただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

jupyter notebookのPythonもバージョンは2.7なのでしょうか?

.isdecimal()はPython 3系で実装された関数ですから、2.7では動きません。

  • 文字列 -> .isdecimal()なし
  • ユニコード文字列 -> .isdecimal()あり

という関係があるみたいです。また、

  • Python 2系は文字列≠ユニコード文字列、
  • Python 3系は文字列=ユニコード文字列

という関係があるため、u'234'.isdecimal()は両方で動きますが(Python 3系では本来uは不要)、
'234'.isdecimal()はPython 2系ではAttributeErrorになります。

細かい違いはあるみたいですが、アラビア数字だけならば大差ないはずなので、.isdigit()で代用すれば良さそうです。

おまけ

.isdigit()だと全角でもTrueになってしまうので、半角のアラビア数字だけにマッチする表現を考えてみました。.isdigit()で充分かもしれませんが、参考になれば幸いです。

len(re.findall(r'^[0-9]+$',target)) != 0

使用例

Python

1import re 2 3target = input() 4 5if len(re.findall(r'^[0-9]+$',target)) != 0: 6 print('number') 7else: 8 print('not number')

投稿2018/02/04 01:31

編集2018/02/04 07:25
namnium1125

総合スコア2043

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2018/02/04 06:45 編集

unicode文字列.isdecimalは存在するので、 u'234'.isdecimal()なら通るみたいですよ。
namnium1125

2018/02/04 06:53

ああ、本当ですね。ありがとうございます。追記します。
tarou2

2018/02/04 07:31

ありがとうございます!! python2ではuをつけるか、isdigit()を使えばいいんですね おまけのところの文法は初めて見ました、勉強して理解します! jupyter notebookのpythonは3だと思います(右上にpython3と出ていたので)
guest

0

Python2は2020年でサポートが切れるので、よほどの事情がない限り今から環境を構築するのでしたら、python3環境を構築するのをお勧めします。

1,別解 プレフィックスなし文字列をpython 2環境でもunicode文字列として扱う方法
__future__ モジュールのunicode_literalsを使用

Python

1# -*- coding: utf8 -*- 2from __future__ import unicode_literals 3 4 5def main(): 6 print('234'.isdecimal()) 7 8 9if __name__ == '__main__': 10 main()

2,スクリプト内でPythonインタプリタのバージョンを判定する方法

Python

1import sys 2print(sys.version)

投稿2018/02/04 08:49

編集2018/02/04 08:50
umyu

総合スコア5846

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tarou2

2018/02/04 09:06

こういう方法もあるのですね! python2だったので、アンインストールしてpython3をインストールしました python2の時は日本語を認識しなくて、困っていましたが3では日本語も扱えるようになり、便利だと感じています アドバイスとご教授ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問