Как проверить в python, содержит ли строка только числа?
Как проверить, содержит ли строка только числа?
Я дал ему идти здесь. Я хотел бы увидеть самый простой способ сделать это.
import string
def main():
isbn = input("Enter your 10 digit ISBN number: ")
if len(isbn) == 10 and string.digits == True:
print ("Works")
else:
print("Error, 10 digit number was not inputted and/or letters were inputted.")
main()
if __name__ == "__main__":
main()
input("Press enter to exit: ")
7 ответов:
использовать
str.isdigit
:>>> "12345".isdigit() True >>> "12345a".isdigit() False >>>
используйте строку isdigit:
>>> s = '12345' >>> s.isdigit() True >>> s = '1abc' >>> s.isdigit() False
вы можете использовать блок try catch здесь:
s="1234" try: num=int(s) print "S contains only digits" except: print "S doesn't contain digits ONLY"
как каждый раз, когда я сталкиваюсь с проблемой с проверкой, потому что str может быть None иногда, и если str не может быть None, используйте только str.isdigit () недостаточно, так как вы получите ошибку
AttributeError: 'NoneType' объект не имеет атрибут 'isdigit'
и затем вам нужно сначала проверить str нет или нет. Чтобы избежать ветви multi-if, ясный способ сделать это:
if str and str.isdigit():
надеюсь, что это помогает людям иметь ту же проблему вроде меня.
насчет числа с плавающей точкой,минусы номера, etc.. Все предыдущие примеры будут ошибочными.
до сих пор я получил что-то вроде этого, но я думаю, что это могло быть намного лучше:
'95.95'.replace('.','',1).isdigit()
будет возвращать true только если есть один или нет. в строку цифр.
'9.5.9.5'.replace('.','',1).isdigit()
возвращает false
вы также можете использовать регулярное выражение,
import re
например: -1) word = "3487954"
re.match('^[0-9]*$',word)
например: -2) word = "3487.954"
re.match('^[0-9\.]*$',word)
например: -3) word = "3487.954 328"
re.match('^[0-9\.\ ]*$',word)
как вы можете видеть все 3, например, означает, что там только нет в строке. Таким образом, вы можете следовать соответствующим решениям, приведенным с ними.