ユーザーの文字列入力が数値かどうかを確認するにはどうすればよいですか(例:-1
、0
、1
など)。
user_input = input("Enter something:")
if type(user_input) == int:
print("Is a number")
else:
print("Not a number")
input
は常に文字列を返すので、上記は機能しません。
単にそれをintに変換して、うまくいかない場合はそれを救済してみてください。
try:
val = int(userInput)
except ValueError:
print("That's not an int!")
どうやらこれは負の値ではうまくいきませんが、正の値ではうまくいきます。申し訳ありませんが、最近Pythonに習ったばかりなので、数時間前に自分自身でこのことについて学びました。
Isdigit()を使う
if userinput.isdigit():
#do stuff
Python 3では、以下がうまくいきます。
userInput = 0
while True:
try:
userInput = int(input("Enter something: "))
except ValueError:
print("Not an integer!")
continue
else:
print("Yes an integer!")
break
編集:あなたはまた、その数または負数であるかどうかを調べるために、この下のコードを使用することができます
import re
num_format = re.compile("^[\-]?[1-9][0-9]*\.?[0-9]+$")
isnumber = re.match(num_format,givennumber)
if isnumber:
print "given string is number"
あなたはまたあなたの特定の要求にあなたのフォーマットを変えることができます。私はこの投稿が少し遅すぎるのを見ています。しかしこれが答えを探している他の人に役立つことを願っています:)。与えられたコードに何か問題があるかどうかを教えてください。
特にintやfloatが必要な場合は、 "is not int"または "is not float"を試してください。
user_input = ''
while user_input is not int:
try:
user_input = int(input('Enter a number: '))
break
except ValueError:
print('Please enter a valid number: ')
print('You entered {}'.format(a))
あなたがintで作業する必要があるだけならば、私が見た中で最もエレガントな解決策は ".isdigit()"メソッドです:
a = ''
while a.isdigit() == False:
a = input('Enter a number: ')
print('You entered {}'.format(a))
入力が特定の範囲内で正の整数ANDであるかどうかをチェックするのに問題なく動作します。
def checkIntValue():
'''Works fine for check if an **input** is
a positive Integer AND in a specific range'''
maxValue = 20
while True:
try:
intTarget = int(input('Your number ?'))
except ValueError:
continue
else:
if intTarget < 1 or intTarget > maxValue:
continue
else:
return (intTarget)
最もエレガントな解決策はすでに提案されているでしょう、
a=123
bool_a = a.isnumeric()
残念ながら、負の整数とaの一般的なfloat値の両方には機能しません。あなたのポイントが 'a'が整数を超えた一般的な数であるかどうかをチェックすることであるならば、私は以下のものを提案するでしょう。これがテストです。
def isanumber(a):
try:
float(repr(a))
bool_a = True
except:
bool_a = False
return bool_a
a = 1 # integer
isanumber(a)
>>> True
a = -2.5982347892 # general float
isanumber(a)
>>> True
a = '1' # actually a string
isanumber(a)
>>> False
私はあなたがそれが便利だと思うことを願っています:)
負の数には、@ karthik27をお勧めします。
import re
num_format = re.compile(r'^\-?[1-9][0-9]*\.?[0-9]*')
それから、その正規表現、match()、findall()などを使って、何でもします。
文字列にはisdigit()メソッドを使用できます。この場合、あなたが言ったように入力は常に文字列です:
user_input = input("Enter something:")
if user_input.isdigit():
print("Is a number")
else:
print("Not a number")
このソリューションは整数のみを受け入れ、整数以外は受け入れません。
def is_number(s):
while s.isdigit() == False:
s = raw_input("Enter only numbers: ")
return int(s)
# Your program starts here
user_input = is_number(raw_input("Enter a number: "))
自然:[0、1、2 ...∞]
Python 2
it_is = unicode(user_input).isnumeric()
Python 3
it_is = str(user_input).isnumeric()
整数:[-∞、..、-2、-1、0、1、2、∞]
try:
int(user_input)
it_is = True
except ValueError:
it_is = False
float:[-∞、..、-2、-1.0 ... 1、-1、-0.0 ... 1、0、0.0 ... 1、...、1、1.0 ... 1、...、∞]
try:
float(user_input)
it_is = True
except ValueError:
it_is = False
これは端数を含む任意の数で機能します。
import fractions
def isnumber(s):
try:
float(s)
return True
except ValueError:
try:
Fraction(s)
return True
except ValueError:
return False
入力を数値で除算しないのはなぜですか。この方法はすべてに有効です。マイナス、フロート、マイナスフロート。空白スペースとゼロもあります。
numList = [499, -486, 0.1255468, -0.21554, 'a', "this", "long string here", "455 street area", 0, ""]
for item in numList:
try:
print (item / 2) #You can divide by any number really, except zero
except:
print "Not A Number: " + item
結果:
249
-243
0.0627734
-0.10777
Not A Number: a
Not A Number: this
Not A Number: long string here
Not A Number: 455 street area
0
Not A Number:
私はこれがかなり遅いことを知っていますが、これを理解しようとするのに6時間を費やさなければならなかった他の誰かを助けるためです。 (それは私がしたことです):
これは完璧に動作します。(入力に文字が含まれているかどうかをチェックします/入力が整数か浮動小数点かをチェックします)
a=(raw_input("Amount:"))
try:
int(a)
except ValueError:
try:
float(a)
except ValueError:
print "This is not a number"
a=0
if a==0:
a=0
else:
print a
#Do stuff
浮動小数点数を評価し、入力としてNaN
sを受け入れたいが'abc'
のような他の文字列を受け入れたくない場合は、次のようにします。
def isnumber(x):
import numpy
try:
return type(numpy.float(x)) == float
except ValueError:
return False
これはINTとRANGEの入力をチェックする簡単な関数です。ここで、入力が1〜100の整数の場合は 'True'、それ以外の場合は 'False'を返します。
def validate(userInput):
try:
val = int(userInput)
if val > 0 and val < 101:
valid = True
else:
valid = False
except Exception:
valid = False
return valid
私は共有したいと思っていた別のアプローチを使っています。有効範囲の作成から始めます。
valid = [str(i) for i in range(-10,11)] # ["-10","-9...."10"]
今番号を頼み、リストになければ尋ね続けなさい:
p = input("Enter a number: ")
while p not in valid:
p = input("Not valid. Try to enter a number again: ")
最後にintに変換します(listは文字列として整数しか含まないのでうまくいきます:
p = int(p)
これを試して!負の数を入力してもそれは私のために働きました。
def length(s):
return len(s)
s = input("Enter the String: ")
try:
if (type(int(s)))==int :
print("You input an integer")
except ValueError:
print("it is a string with length " + str(length(s)))
while True:
b1=input('Type a number:')
try:
a1=int(b1)
except ValueError:
print ('"%(a1)s" is not a number. Try again.' %{'a1':b1})
else:
print ('You typed "{}".'.format(a1))
break
これは、入力が整数かどうかを調べるループを作ります。結果は以下のようになります。
>>> %Run 1.1.py
Type a number:d
"d" is not a number. Try again.
Type a number:
>>> %Run 1.1.py
Type a number:4
You typed 4.
>>>
これが最も簡単な解決策です:
a= input("Choose the option\n")
if(int(a)):
print (a);
else:
print("Try Again")
私はまた今朝問題に遭遇しました、ユーザーが私の特定の整数の要求に整数以外の応答を入力することができた。
これが、私が望んだ答えを強制するためにうまく機能するようになった解決策でした。
player_number = 0
while player_number != 1 and player_number !=2:
player_number = raw_input("Are you Player 1 or 2? ")
try:
player_number = int(player_number)
except ValueError:
print "Please enter '1' or '2'..."
使用したときにtry:文に到達する前に、例外が発生します。
player_number = int(raw_input("Are you Player 1 or 2? ")
ユーザーが "J"またはその他の整数以外の文字を入力した。生の入力として受け取り、その生の入力が整数に変換できるかどうかを確認し、その後それを変換するのが最善の方法です。