Своеобразное задание на Python. Перевернут вещественное число
Никак не могу разобраться, как это перевернуть. Понимаю, что нужно, сначала развернуть часть до точки, потом ту, что за точкой и засуммировать. Писал что-то, писал, так и не пришел к решению.
Буду благодарен за помощь.[![Так выглядит задание.][1]](https://i.stack.imgur.com/o8Ezb.png)
#Пытался что-то написать, как моя голова думала. Так и не смог завершить...
def get_reversed(user_input):
new_number = ''
while user_input != 0:
new_number += str(user_input % 10)
user_input //= 10
new_number = int(new_number)
return new_number
def point_separation(user_input):
left_num = ''
right_num = ''
for symbol in str(user_input):
if symbol == '.':
left_num = str(get_reversed(right_num))
right_num = ''
right_num += str(symbol)
right_num = str(get_reversed(right_num))
reversed_num = str(left_num + '.' + right_num)
return reversed_num
user_input1 = (input('Enter the first number\n>>> '))
user_input2 = (input('Enter the second number\n>>> '))
separation_number1 = point_separation(user_input1)
separation_number2 = point_separation(user_input2)
Ответы (3 шт):
UPD
convert = lambda x: float('.'.join(map(''.join, map(reversed, x.split('.')))))
было очень не красиво.
Конечно же
convert = lambda x: float('.'.join([elem[::-1] for elem in x.split('.')])).
Спасибо @StanislavVolodarskiy за напоминание
convert = lambda x: float('.'.join([elem[::-1] for elem in x.split('.')]))
val_1 = convert(input('Введите первое число: '))
val_2 = convert(input('Введите второе число: '))
print()
print(f'Первое число наоборот: {val_1}')
print(f'Второе число наоборот: {val_2}')
print(f'Сумма: {val_1 + val_2}')
convert - более наглядно
def convert(val: str) -> float:
# сплит значения по точке
elements = val.split('.')
reversed_elements = [elem[::-1] for elem in elements]
# теперь соединяем через точку две перевернутые части
converted_val = '.'.join(reversed_elements)
# и возвращаем значение приведенное к float
return float(converted_val)
В первом варианте с люмбдой записана та же последовательность действий только в одну строку
Решать нужно в строках. Вещественные числа не хранят десятичные дроби точно. А со строками всё просто: разбиваем число по десятичной точке, обе части разворачиваем как строки, объединяем - функция reverse_n получает и возвращает строки:
def reverse_n(s):
return '.'.join(p[::-1] for p in s.split('.'))
n = reverse_n(input('Введите первое число: '))
k = reverse_n(input('Введите второе число: '))
print()
print('Первое число наоборот:', n)
print('Второе число наоборот:', k)
print('Сумма:', float(n) + float(k))
Вот и способ решения, который требовали. Всем спасибо за помощь, все оказалось еще легче, чем я думал.
def get_reversed(user_input):
int_part = int(user_input)
float_part = user_input - int_part
reversed_int = 0
reversed_float = 0
while 0 < int_part:
reversed_int = reversed_int * 10 + int_part % 10
int_part //= 10
while 1e-8 < float_part:
reversed_float = reversed_float / 10 + int(float_part * 10) / 10
float_part = float_part * 10 % 1
return reversed_int + reversed_float
user_input1 = get_reversed(float(input('Enter first number\n>>> ')))
user_input2 = get_reversed(float(input('\nEnter second number\n>>> ')))
print(f'Sum: {user_input1 + user_input2}')