質問するログイン新規登録
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

2512閲覧

python3 数字かどうか調べたい

midori_saki

総合スコア29

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

2グッド

0クリップ

投稿2017/10/05 05:35

2

0

python3学習中です。初心者です。
参考書にあるコードで質問がでてきました。

入力した4桁の数字をあてるゲームをpython3で作成してます。

最初に
import random
a = [random.randomint(0,9)
random.randomint(0,9)
random.randomint(0,9)
random.randomint(0,9)]
で4桁の数字を作成しておき、
b = input("")
で数字を4桁入力します。

その中で、各桁が数字であることを判断するコードがあり、
if(b[0] >= "0") and (b[0] <= "9"):
と記載してありました。
コードの意味は理解できるのですが、これが数字かどうかの判定プログラムだと
いうことが理解できなく・・・。

調べたらisdigit()という関数があるのですが、なぜ
if(b[0] >= "0") and (b[0] <= "9"):
と書くのでしょうか・・・。

ご説明いただけますと幸いです。
どうぞよろしくお願いしますm(._.)m

LouiS0616, namnium1125👍を押しています

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

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

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

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

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

mdj

2017/10/05 05:48

想像としましては、まだisdigit()とかを使うところまで参考書の内容が進んでいないとされている、とかでしょうか。
midori_saki

2017/10/05 05:52

それが・・・isdigit()は参考書の中の索引になく、ネットで得た情報なのです。参考書では、上の書き方を推奨しています。
guest

回答2

0

ベストアンサー

str.isdigitが『数字』とみなすものが、想定より広いからかもしれません。

文字列中の全ての文字が数字で、かつ 1 文字以上あるなら真を、そうでなければ偽を返します。ここでの数字とは、十進数字に加えて、互換上付き数字のような特殊操作を必要とする数字を含みます。また 10 を基数とした表現ができないカローシュティー数字のような体系の文字も含みます。正式には、数字とは、プロパティ値 Numeric_Type=Digit または Numeric_Type=Decimal を持つ文字です。

引用元: Python3.6.1ドキュメント (太字は引用者によるもの)


EXTENDED ARABIC-INDIC DIGIT SIX
例えば、この文字。どっかで『6』の意味合いを持つ数字らしいです。
こいつを使ってちょっと試してみます。

Python

1>>> u'\u06F6'.isdigit() 2True 3>>> '0' <= u'\u06F6' <= '9' 4False

str.isdigitだとTrueになってしまうんですね。
半角アラビア数字のみを扱いたいから、isdigitを避けたという解釈は出来なくないかと。

まあ普通こんな入力する人いないでしょうが...
そもそも条件式の書き方を見ても、ちょっとご参照のコードは怪しいです。
特に深い意味はなく、単に入力が0~9だと確信したかったのでは。


普通に数値として扱えるようです。すごいですね。

Python

1>>> int(u'\u06F6') 26

投稿2017/10/05 06:39

LouiS0616

総合スコア35678

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

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

midori_saki

2017/10/05 07:23

いつもありがとうございます。 いただいたご説明を読んで、なんとなくわかってきたように感じました。 先に進んでみます。 またよろしくお願いします。
YouheiSakurai

2017/10/05 07:50

質問者へただただ伝えたい補足ですが、「if(b[0] >= "0") and (b[0] <= "9"):」はかなりわかりにくい書き方なので「if b[0] in "0123456789":」と解釈してから理解したほうが良いと思います。
midori_saki

2017/10/05 11:22

ありがとうございます。 いただいた内容ですっきりしてきました。 そのコードだと理解できます。
guest

0

まず、「input」で入力されるのは「文字列」です。
PCは「文字列」を「数値の羅列」として判断します。

ASCII文字コード

数字の0から9までは連続した値で定義されているため、

if(b[0] >= "0") and (b[0] <= "9"):

で対象の文字列が数字であることが判定できます。

投稿2017/10/05 06:11

tkturbo

総合スコア5572

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

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

midori_saki

2017/10/05 06:18

お手数ですが、 >PCは「文字列」を「数値の羅列」として判断します。 ここをもう少しかみ砕いて教えてくださいますか。 よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問