Перевірити чи є рядок числом у Python
На жаль, функція isdigit не працює для чисел з плаваючою точкою і для негативних чисел.
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
Отримання введення користувача в Python з input()
Отримання та обробка інформації — один із найважливіших елементів будь-якої мови програмування, особливо якщо йдеться про отримання інформації від користувачів.
Python, повільний щодо таких мов, як C або Java, пропонує просунуті інструменти для отримання, аналізу та обробки даних від кінцевого користувача.
У цьому матеріалі йтиметься про те, які функції Python можна використовувати для цих цілей.
Введення в Python
Для отримання інформації з клавіатури в Python є функції input() або raw_input() (про різницю між ними трохи пізніше).
Коли input() або raw_input() викликаються, потік програми зупиняється до тих пір, поки користувач не введе дані через командний рядок. Для введення потрібно натиснути Enter після завершення набору тексту. У цьому випадку введений рядок просто буде передано додатку.
Цікаво, що дещо змінилося в принципі роботі функції між Python 2 і Python 3, що відбилося в різниці між input() та raw_input(). Про це далі.
Порівняння функцій input та raw_input
Різниця між цими функціями залежить від версії Python. Так, у Python 2 функція raw_input() використовується для отримання введення від користувача через командний рядок, а input() оцінює її та спробує запустити як код Python.
У Python 3 raw_input() позбулися, залишивши тільки input() . Вона використовується для отримання користувача з клавіатури. Можливості input() з Python 2 до Python 3 не працюватимуть. Для тієї ж операції необхідно використовувати інструкцію eval(input()).
Погляньте на приклад функції raw_input у Python 2.
# Python 2 txt =
raw_input("Введіть що-небудь, щоб перевірити це:")
print
"Це те, що ви щойно ввели?", txt
Висновок
Введіть щось, щоб перевірити це: Привіт, мир! Це те, що ви щойно ввели? Привіт, мир!
А ось як вона працює у Python 3
# Python 3 txt =
input("Введіть що-небудь, щоб перевірити це:")
print("Це те, що ви щойно ввели?", txt)
Висновок
Введіть щось, щоб перевірити це: Привіт, світ 3! Це те, що ви щойно ввели? Привіт, світ 3!
Далі в матеріалі використовуватиметься метод input з Python 3, якщо не вказано інше.
Рядкове та числове введення
За умовчанням функція input() конвертує всю отриману інформацію в рядок. Попередній приклад продемонстрував це.
З числами потрібно працювати окремо, оскільки вони теж є рядками. Наступний приклад показує, як можна отримати інформацію числового типу:
# Введення запитується і зберігається в змінній test_text =
input
("Введіть число: ")
# Перетворимо рядок на ціле число.
# функція float() використовується замість int(),
# для перетворення введення користувача в десятковий формат, test_number =
int(test_text)
# Виводимо в консоль змінну
print
("Введене число: ", test_number)
Висновок
Введіть число:
13 Введене число:
13
Того ж можна досягти і таким чином:
test_number =
int(input("Введіть число: "))
Тут відразу після збереження введення відбувається перетворення та надання значення змінної.
Потрібно лише відзначити, що якщо користувач ввів не ціле число, код поверне виняток (навіть якщо це число з точкою, що плаває).
Обробка винятків уведення
Є кілька способів, як можна переконатися, що користувач ввів коректні дані. Один із них — перехоплювати всі можливі помилки, які можуть виникнути.
Ось такий код вважається небезпечним:
test2word =
input("Скільки вам років?") test2num =
int(test2word)
print("Ваш вік", test2num)
Запустимо його і введемо таке:
Скільки вам років? П'ять
При виклику функції int() з рядком П'ять з'явиться виняток ValueError і програма зупинить роботу.
Ось як можна зробити код безпечнішим і обробити введення:
test3word =
input("Введіть своє щасливе число:")
try: test3num =
int(test3word)
print("Це правильне введення! Ваше щасливе число: ", test3num)
except ValueError:
print("Це не правильне введення. Це не число взагалі! Це рядок, спробуйте ще раз.")
Цей блок оцінить уведення. Якщо він є цілим числом, представленим у вигляді рядка, то функція input() конвертує їх у ціле число. Якщо ні, то програма видасть виняток, але замість помилки його буде перехоплено. В результаті викликається друга інструкція print.
Ось так виглядатиме висновок з винятком.
Введіть своє щасливе число: Сім Це не правильне введення. Це не число взагалі! Це рядок, спробуйте ще раз.
Такий код можна об'єднати з іншою конструкцією, наприклад, циклом for, щоб переконатися, що код буде виконуватися постійно, доки користувач не введе дані, які потрібні.
Повний приклад
# Створимо функцію для демонстрації прикладу
def
example():
# Нескінченний цикл, який продовжує виконуватись
до виникнення винятку
while
True: test4word =
input("Як вас звати?")
try: test4num =
int(input("Скільки годин ви граєте на своєму мобільному телефоні?"
))
# Якщо отримане введення не число, буде викликано виняток
except ValueError:
Цикл буде повторюватися до правильного введення
print("Error! Це не число, спробуйте знову.")
# При успішному перетворенні на ціле число,
цикл закінчиться.
else:
print("Вражає,", test4word,
"! Ви витрачаєте", test4num*60,
"хвилин або", test4num*60*60,
"секунд на ігри у своєму телефоні!")
break
# Викликаємо функцію example()
Висновок:
Як вас звати? Олександр Скільки годин ви граєте на своєму мобільному телефоні? 3 Засмучує, Олександре! Ви витрачаєте 180 хвилин або 10800 секунд на ігри у своєму телефоні!
Висновки
У цій статті ви дізналися, як вбудовані інструменти Python використовуються для отримання введення користувача в різних форматах. Також навчилися обробляти винятки та помилки, які можуть виникнути у процесі.
Перевірка на число
Досить часто потрібно дізнатися: чи записано до змінної число. Така ситуація може виникнути під час обробки введених користувачем даних. Під час читання даних із файлу або обробки отриманих даних від іншого пристрою.
У Python перевірка рядка на число можна здійснити двома способами:
- Перевірити всі символи рядка, що в них записані цифри. Зазвичай використовується для цього функція, що єdigit.
- Спробувати перевести рядок у число.У Python це здійснюється за допомогою методів float та int. У цьому випадку обробляється можливий виняток.
Розглянемо як застосовуються ці методи практично.
isdigit, isnumeric і isdecimal
У рядків є метод, якийдозволяє перевірити, чи є символи, чи є символи, з яких складається рядок цифрами. За допомогою цього методу ми можемо перевірити, чи в рядок записано ціле позитивне число чи ні. Позитивне це тому, що знак мінус не вважатиметься цифрою і метод поверне значення False.
a = '0251' print(a.isdigit()) True
Якщо рядок буде порожнім, то функція поверне False.
a = '' print(a.isdigit()) False
Методи рядка є numerical і isdecimal працюють аналогічно. Відмінності у цих методах лише у обробці спеціальних символів Unicode. Оскільки користувач вводитиме цифри від 0 до 9, а різні символи, наприклад, дробів чи римських цифр нас цікавлять, слід використовувати функцію isdigit.
Перевірка за допомогою виключення
Що робити, якщо потрібно перевірити рядок на негативне число. У Python за допомогою цьогоdigit не вдасться визначити негативне число або число з плаваючою точкою. У цьому випадку є універсальний та найнадійніший спосіб. Треба привести рядок до речового числа. Якщо виникне виняток, то в рядку записано не число.
Наведемо функцію та приклад її використання:
def is_number(str): try: float(str) return True except ValueError: return False a = '123.456' print(is_number(a)) True
Для цілих чисел
Аналогічно можна зробити і перевірку на ціле число:
def is_int(str): try: int(str) return True except ValueError: return False a = '123.456' print(is_int(a)) False