#python #python-3.x #math #floating-point
#python #python-3.x #математика #с плавающей запятой
Вопрос:
Я пишу функцию, которая принимает положительное число и меняет местами числа до и после десятичной точки и возвращает их в виде строки. Если входные данные являются целым числом, то возвращаемая строка начинается с «0». т.е. 37 -> 0.37
def float_swap(x):
a = x - int(x)
b = int(x)
return str(b a)
print(float_swap(2.5))
# 2.5
Где я здесь ошибаюсь?
Комментарии:
1. Немного упростите уравнение — что
int(x) x - int(x)
равно? Возможно, вы захотите сделать это как строковую операцию, а не как математическую операцию.
Ответ №1:
Обратите внимание на комментарии, которые я вставил в ваш код, чтобы лучше понять, что происходит:
def float_swap(x): # 2.5
a = x - int(x) # a = 2.5 - 2 = 0.5
b = int(x) # b = 2
return str(b a)# str(2 0.5)
print(float_swap(2.5))
# 2.5
Правильным способом было бы
def float_swap(x): # 2.5
return '.'.join(str(float(x)).split('.')[::-1])
print(float_swap(2.5))
print(float_swap(37))
Вывод:
5.2
0.37
Комментарии:
1. @cdlane Спасибо, я не могу поверить, что пропустил это.
Ответ №2:
Причина ошибки указана в предыдущих ответах. Если вас интересует решение, вы можете сделать следующее:
def float_swap(x):
s=str(float(x))
return s[s.find('.') 1:] '.' s[:s.find('.')]
Ответ №3:
Если вы просто хотите разделить значения до и после десятичной дроби, я бы предложил типизацию в виде строки, а затем разделение с использованием ‘.’ в качестве разделителя. Затем замена двух значений и возврат результата при сложении. Ниже приведен пример
def float_swap(x):
a = float(x)
a, b = str(a).split('.')
return b '.' a
Затем float_swap(2)
возвращает 0.2
Ответ №4:
def swap(num):
num = str(float(num))
a, b = num.split('.')
res = b '.' a
return res
print(swap(2)) # 0.2
print(swap(21.34)) # 34.21
Ответ №5:
Ваш код не меняется местами.
Измените его на
def float_swap(x):
ix = int(x)
if x == ix:
return f"0.{ix}"
return '.'.join(str(x).split(".")[::-1])
print(float_swap(2.5))
print(float_swap(37))
Вывод:
5.2
0.37
или преобразуйте x в float каждый раз, поэтому, если вы получаете a 37
в качестве входных данных, вы делаете это 37.0
и можете удалить предложение if.
Ответ №6:
Используя Python3 fstring, я думаю, мы могли бы сделать это проще:
def float_swap(x):
return f"{x % 1 * 10:.0f}.{x:.0f}"
print(float_swap(2.5))
print(float_swap(37))
ВЫВОД
> python3 test.py
5.2
0.37
>