Одна из наиболее распространенных вопросов, связанных со строками - из преобразование в число. Как преобразовать в python строку в число мы рассмотрим в этом посте. Также сможем проверить, является ли содержимое строки числом.
В стандартной библиотеке python есть великолепные функции преобразования. Но к сожалению они ограничены. Функция int() возвращает целое число, если получает на входе строку с целочисленным значением. Та же история с float() - число с плавающей точкой. Иначе обе эти функции возвращают ошибку TypeError...
Ниже приведен полный код программы, в которой 5 функций:
- Чистка строки: удаляет из строки все символы, доведя содержимое до целочисленного или числа с плавающей точкой.
- Функция преобразования строки в целочисленное. На входе должна быть строка с любым числовым содержимым: "123.4" или "232"
- Функция проверки содержимого строки на "целочисленность".
- Функция преобразования строки в число с плавающей точкой. На входе должна быть строка с любым числовым содержимым: "123.4" или "232"
- Проверяем, является ли содержимое строки числом с плавающей точкой.
Это, на мой взгляд, наиболее распространенные задачи, которые приходится решать в области преобразования строк в числа. Далее код программы:
# ~*~ coding: utf8 ~*~
def clear_string(str, to_int = None):
"""
Чистим строку от "мусора" - нечисловых символов.
"""
new_str = ""
for s in str:
# сначала ищем точку (вдруг число с плавающей точкой)
# при этом в новой строке не должно быть больше одной точки
# и в условии to_int не определен
if s == "." and "." not in new_str and not to_int:
new_str += s
else:
try:
i = int(s)
new_str += s
except:
pass
return new_str
def str_to_int(str):
"""
Преобразование стоки в целое число
"""
# попробуем воспользоваться самым простым методом
try:
return int(str)
except:
# если не получилось, то проверяем почему? допускаем, что было передано не целое число в строке
if "." in str:
str = str[0:str.find(".")]
return str_to_int(str)
else:
# если уж совсем дела плохи, то возвращаем 0
return 0
def check_int(str):
try:
int(str)
return True
except:
return False
def str_to_float(str):
"""
Преобразование стоки в число с плавающей точкой
"""
# попробуем воспользоваться самым простым методом
try:
return float(str)
except:
# других вариантов не осталось. скорее всего функция приняла на входе мусор
return 0
def check_float(str):
try:
float(str)
return True
except:
return False
# есть у нас незатейливая строка
str = "a23d.d.5ff6"
# проверяем функцию чистки строки
print("Чищеная строка: %s" % clear_string(str))
print("Чищеная строка с to_int: %s" % clear_string(str, to_int=True))
# до преобразования строки в число следовало бы почистить ее
print("Преобразуем мусор в целое число: %s" % str_to_int(str))
print("Преобразуем чищеную строку в целое число: %s" % str_to_int(clear_string(str)))
# преобразуем строку в число с плавающей точкой
print("Преобразуем мусор в число с плавающей точкой: %s" % str_to_float(str))
print("Преобразуем чищеную строку в число с плавающей точкой: %s" % str_to_float(clear_string(str)))
print("Проверяем, является ли содержимое строки целочисленным: %s" % check_int(str))
print("Проверяем, является ли содержимое чищеной строки целочисленным: %s" % check_int(clear_string(str, to_int=True)))
print("Проверяем, является ли содержимое строки числом с плавающей точкой: %s" % check_float(str))
print("Проверяем, является ли содержимое чищеной строки числом с плавающей точкой: %s" % check_float(clear_string(str)))
Задачу по проверке содержимого строки на целочисленность можно было бы решить с помощью стандартной функции isdigit(). Но это слишком просто. Для наглядности и создали функцию check_int(), которая работает так же, как и isdigit().
# Для успокоения души слишком любознательных приведу пример
"s34".isdigit()
# False
"34".isdigit()
# True
clear_string("s43de463").isdigit()
# True
Ну и напоследок, если у вас есть комментарии или более интересные задачи из выше рассмотренной области, то прошу комментировать. Попробуем решить задачу вместе.