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