Advertisement
Roman9234

Разница вещественных чисел

Jul 16th, 2022
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.39 KB | None | 0 0
  1. numbers = [1.1, 1.2, 3.1, 5.567, 10.03]
  2.  
  3. def null_counter(num:float):
  4.     '''
  5.    Переносит точку в числе и считает, сколько знаков после точки
  6.    param: num - вещественное число
  7.    return: counter - количество символов после точки, num = int
  8.    '''
  9.     counter = 0
  10.     while num != int(num):
  11.         num*=10
  12.         counter+=1
  13.     return counter, num
  14. def change_list(nums: list):
  15.     '''
  16.    Изменяет список чисел: переносит точки вправо у всех чисел.
  17.    Первый цикл: делает описанное выше и узнает наибольшее количество символов после точки
  18.    Второй цикл: подгоняет остальные цифры к max_counter
  19.    
  20.    Пример
  21.    Вход:1.1 и 1.234.
  22.    max_counter = 3
  23.    Выход:1100 и 1234
  24.    param: nums - список вещественных чисел
  25.    return: counter - количество символов после точки, num = int
  26.    '''
  27.     max_counter = 0
  28.     counters_list = []
  29.     for i in range(len(nums)):
  30.         counter,num = null_counter(nums[i])
  31.         counters_list.append(counter)
  32.         nums[i] = num
  33.         if counter > max_counter:
  34.             max_counter = counter
  35.     for i in range(len(counters_list)):
  36.         counter = max_counter - counters_list[i]
  37.         if counter:
  38.             nums[i] *= 10**counter
  39.     return nums, max_counter
  40.  
  41. def difference_max_min(nums):
  42.     '''
  43.    Оставляет в числах списка только вещественную часть,
  44.    находит разницу между макс. и мин. числами
  45.    params: nums - список целых чисел
  46.    return: (float, float) разницы, где 1 - целая, 2 - вещественная
  47.    '''
  48.     nums, max_counter = change_list(nums)
  49.     print(nums, max_counter)
  50.     max_num, min_num = 0,nums[0]
  51.     for num in nums:
  52.         float_part=num % 10**max_counter
  53.         print(float_part)
  54.         if float_part > max_num:
  55.             max_num = float_part
  56.         if float_part < min_num:
  57.             min_num = float_part
  58.     print(f'{max_num=},{min_num=}')
  59.     return max_num - min_num, (max_num - min_num)/10**max_counter
  60.  
  61.  
  62.  
  63. print(difference_max_min(numbers))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement