Перейти к содержимому

Как проверить является ли строка числом python

  • автор:

Проверить, что в строке число

Пользователь вводит значения через запятую. Предполагается что он ввел числа. Допустимым являются как int , так и float .
Как проверить ввел ли пользователь числа или нет ? Я пробовала из введенной строки удалить все пробелы, точки и запятые, а затем проверить .isdigit() . Но мне показалось это решение слишком громоздким.

user_num_str = input('Enter numbers separated by commas: ') user_num_str_check = user_num_str.replace(' ', '') user_num_str_check1 = user_num_str_check.replace(',', '') user_num_str_check2 = user_num_str_check1.replace('.', '') if not user_num_str_check2.isdigit(): print('Seams like string!') 

Буду очень признательна, если посоветуете более простой метод.
Отслеживать
7,175 9 9 золотых знаков 37 37 серебряных знаков 66 66 бронзовых знаков
задан 14 июн 2019 в 14:52
Viktoriia Kovalchuk Viktoriia Kovalchuk
31 1 1 золотой знак 1 1 серебряный знак 2 2 бронзовых знака

Ваше решение не только громоздкое, но и пропустит заранее не верные результаты. Например 0 1.2.3 явно не валидное число, но похоже пройдет вашу проверку

14 июн 2019 в 14:54
«Только числа» или «как минимум одно число»?
14 июн 2019 в 15:04
Пользователь должен ввести только числа
26 июн 2019 в 14:15

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Задачу можно разделить на 2 части:
1. Разбить введенные пользователем данные на элементы(через запятую)
2. Проверить, является ли введенный элемент числом

Сначала определим функцию проверки на число:

def is_number(s): try: float(s) return True except ValueError: return False 

Допустим пользователь ввел строку:

s = "0 1.2.3, 11, 22, 33, 56.52, .225, 1.000000e+50, 1e50, NAN" 

Тогда ее можно будет разбить на отдельные элементы:

lst = s.split(',') 

И проверить, является ли каждый элемент числом или нет:

for element in lst: print(element, end='') if is_number(element): print(" - число") else: print(" - не число") 
01.2.3 - не число 11 - число 22 - число 33 - число 56.52 - число .225 - число 1.000000e+50 - число 1e50 - число NAN - число 

Обратите внимание, что такой подход признает NAN числом, так как float(‘NAN’) обработается без ошибки. То же самое с True и False . Надо ли проверку на NAN, True, False — это отдельный вопрос. Во всяком случае текущая функция проверит, что с введенными данными вы дальше сможете работать как с числами.

PS
Использовать try except с приведением строки к числу возможно возможно не самый лучший вариант. Однако я не знаю другого хорошего простого варианта проверять числа 1e50 или .125 .
Есть несколько альтернативных вариантов:
1. Использовать регулярки, но как мне кажется они сложнее для понимания. И регулярку, которая будет одновременно воспринимать и научные способы записи вида 1e50 и записи .5552 будет выглядеть довольно сложно. Как говорится, у нас была проблема. Мы решили ее регуляркой, теперь у нас 2 проблемы
2. Использовать str.isnumeric() или str.isdigit()

Тогда у всех элементов в листе надо удалить лишние пробелы

lst = [e.replace(' ', '') for e in lst] 

И снова проверить:

for element in lst: print(element, end='') if element.isdigit(): print(" - число") else: print(" - не число") 
01.2.3 - не число 11 - число 22 - число 33 - число 56.52 - не число .225 - не число 1.000000e+50 - не число 1e50 - не число NAN - не число 

Однако, этот способ проверяет только, что строка состоит из чисел. По этому числа с плавающей точкой или с e не будут признаны числами. Так же это не сработает для отрицательных чисел.

Как проверить строка или число питон

В python тип данных можно определить с помощью функции type() . На выходе функция сообщит, к какому классу относится значение:

>>> type('hello') class 'str'> >>> type(5) int'> >>> type([1, 2]) list'> >>> type((1, 2)) tuple'> >>> 

Как проверить является ли строка числом python

Строки и числа это разные типы данных, потому строка не может быть числом и наоборот. Но если надо проверить, состоит ли строка только из строковых представлений цифр ‘1234567890’ можно, например, так:

s = 'Hello, World!' all(ch in '1234567890' for ch in s) # False s = '178359925' all(ch in '1234567890' for ch in s) # True 

Проверить является ли строка числом в Python

К сожалению функция isdigit не работает для чисел с плавающей точкой и для отрицательных чисел. Так что для такой проверки можно использовать следующую функцию, которая представляет собой комбинацию из проверки isdigit и обычного конвертирования во float:

def is_digit(string): 
if string.isdigit():
return True
else:
try: float(string) return True except ValueError: return False
>>>print(is_digit('neer'))
False

>>>print(is_digit('neer306'))
False

>>>print(is_digit('306'))
True

>>>print(is_digit('0.05'))
True

>>>print(is_digit('0.05abc'))
False

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *