#python #python_3x #input #валидация
Как в Python 3 реализовать проверку на целое число? (все положительные, отрицательные целые числа и ноль)
Ответы
Ответ 1
Чтобы проверить является ли строка введённая пользователем целым числом, можно воспользоваться int в try/except, похожим образом как показано в ответе на вопрос «Python 3 Проверка на дробное число введённое пользователем», порекомендованный @Alex.B, заменив float на int как @gil9red предложил и @slippyk явно показал: def isint(s): try: int(s) return True except ValueError: return False Пример: >>> isint('10') True >>> isint('a') # не десятичная цифра False >>> isint('²') # верхний индекс False >>> isint('১') # Bengali (Unicode) True Это может сломаться, если ввод не строка, например: >>> isint(0.5) # XXX не работает для float True >>> 0.5 .is_integer() False >>> from numbers import Integral >>> isinstance(0.5, Integral) False >>> isinstance(123, Integral) True >>> isinstance(1., Integral) # XXX float False >>> 1..is_integer() # но целое значение True >>> from fractions import Fraction >>> isint(Fraction(1, 2)) # XXX не работает для дробей True >>> isinstance(Fraction(1, 2), Integral) False >>> isinstance(Fraction(1), Integral) # XXX дробь False >>> Fraction(1) == 1 # даже если целое значение True См. How to check if a float value is a whole number. Если вы хотите проверить, что переданная строка содержит только десятичные цифры и ничего более (к примеру, нет '+','-', ' ', '\n' символов в ней), то можно str.isdecimal использовать: >>> '123'.isdecimal() True >>> '+123'.isdecimal() False >>> isint('+123') True >>> isint(' 123\n') True >>> ' 123\n'.isdecimal() False isdecimal() можно использовать, чтобы имена файлов, содержащие цифры, в "естественном" порядке отсортировать (как Windows-проводнике). См. Python analog of natsort function (sort a list using a “natural order” algorithm). Если хотите несколько таких чисел из ввода извлечь, можно регулярное выражение использовать: >>> import re >>> from datetime import datetime >>> date_string = '2016-11-01 23:04:05' >>> datetime(*map(int, re.findall(r'\d+', date_string))) datetime.datetime(2016, 11, 1, 23, 4, 5) Последнее, это возможно более простой, менее строгий (и эффективный) вариант для: >>> datetime.strptime(date_string, '%Y-%m-%d %H:%M:%S') datetime.datetime(2016, 11, 1, 23, 4, 5) Если вы хотите разрешить задавать целые числа в произвольном основании как в исходном коде Питона, то передайте base=0: >>> int('0b1110', 0) # binary ("01") 14 >>> int('0xcafe', 0) # hexadecimal 51966 Подробнее в документации int.Ответ 2
Про числа в питоне почитайте: a = int('19') # Переводим строку в число b = int('19.5') # Строка не является целым числом Traceback (most recent call last): File "", line 1, in ValueError: invalid literal for int() with base 10: '19.5' В чем проблема исправить уже готовую функцию? @gil9red прямым текстом. def isInt(value): try: int(value) return True except ValueError: return False isInt(input())Ответ 3
принимает числовые значения def isInt(n): return int(n) == float(n) >>> isInt(122) True >>> isInt(12.2) False >>> isInt(12.0) True >>>Ответ 4
Попробуй через type(variable). Например: if type(var) is int: print('Variable: %d is int!' % var)Ответ 5
Проверка на самом деле простая. Как вы помните, любое деление или возведение в степень в Python некоего выражения приведёт к тому, что результат операции примет тип переменной float. Функция type() окажется бесполезной. Я для проверки пользуюсь простой формулой деления целого числа на число с плавающей запятой. Если число целое, то результат будет равен 1.0, а иначе отличаться от единицы. Вот пример кода для проверки возведённого в степень числа: number = 170 a=number**(1/2) if int(a)/float(a)==1.0: print('Квадратный корень из',int(number),'равен', int(number**(1/2)), ' - является целым числом') else: print('Квадратный корень из',int(number),'- не целое число.')Ответ 6
Используйте стандартный метод >>> (-2.0).is_integer() True >>> (3.2).is_integer() False
Комментариев нет:
Отправить комментарий