Как вы проверяете на 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: ")

Ответ 1

Вы хотите использовать метод isdigit для вашего объекта str:

if len(isbn) == 10 and isbn.isdigit():

Из isdigit документация:

str.isdigit()

Возвращает true, если все символы в строке являются цифрами и есть хотя бы один символ, иначе false.

Для 8-битных строк этот метод зависит от локали.

Ответ 2

Используйте str.isdigit:

>>> "12345".isdigit()
True
>>> "12345a".isdigit()
False
>>>

Ответ 3

Использовать строку isdigit:

>>> s = '12345'
>>> s.isdigit()
True
>>> s = '1abc'
>>> s.isdigit()
False

Ответ 4

Здесь вы можете использовать блок catch try:

s="1234"
try:
    num=int(s)
    print "S contains only digits"
except:
    print "S doesn't contain digits ONLY"

Ответ 5

Как каждый раз, когда я сталкиваюсь с проблемой с проверкой, потому что str иногда может быть None, а если str может быть None, использовать str.isdigit() недостаточно, так как вы получите сообщение об ошибке

AttributeError: объект 'NoneType' не имеет атрибута 'isdigit'

а затем вам нужно сначала проверить, что str - None или нет. Чтобы избежать ветвления multi-if, ясный способ сделать это:

if str and str.isdigit():

Надеюсь, что это помогает людям иметь такую ​​же проблему, как я.

Ответ 6

Как насчет чисел с плавающей запятой, отрицательных чисел и т.д. Все приведенные выше примеры будут неверными.

До сих пор я получал что-то подобное, но я думаю, что могло бы быть намного лучше:

'95.95'.replace('.','',1).isdigit()

вернет true, только если есть один или нет '.' в строке цифр.

'9.5.9.5'.replace('.','',1).isdigit()

вернет false

Ответ 7

Как указано в этом комментарии Как проверить в python, содержит ли строка только цифры? метод isdigit() не совсем точен для этого варианта использования, поскольку он возвращает True для некоторых цифрообразных символов:

>>> "\u2070".isdigit() # unicode escaped 'superscript zero' 
True

Если этого необходимо избежать, следующая простая функция проверяет, являются ли все символы в строке цифрой от "0" до "9":

import string

def contains_only_digits(s):
    # True for "", "0", "123"
    # False for "1.2", "1,2", "-1", "a", "a1"
    for ch in s:
        if not ch in string.digits:
            return False
    return True

Используется в примере из вопроса:

if len(isbn) == 10 and contains_only_digits(isbn):
    print ("Works")

Ответ 8

Вы также можете использовать регулярное выражение,

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, например, означает, что в вашей строке нет ни одного. Таким образом, вы можете следовать соответствующим решениям, данным с ними.

Ответ 9

Есть 2 метода, которые я могу придумать, чтобы проверить, есть ли в строке все цифры, не являющиеся

Метод 1 (Использование встроенной функции isdigit() в python): -

>>>st = '12345'
>>>st.isdigit()
True
>>>st = '1abcd'
>>>st.isdigit()
False

Метод 2 (выполнение обработки исключений в верхней части строки): -

st="1abcd"
try:
    number=int(st)
    print("String has all digits in it")
except:
    print("String does not have all digits in it")

Вывод приведенного выше кода будет следующим:

String does not have all digits in it