Advertisement
1z0m3r4z3

easy_3.py

Sep 20th, 2017
314
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.29 KB | None | 0 0
  1. # Задание-1:
  2. # Напишите функцию, округляющую полученное произвольное десятичное число
  3. # до кол-ва знаков (кол-во знаков передается вторым аргументом).
  4. # Округление должно происходить по математическим правилам (0.6 --> 1, 0.4 --> 0).
  5. # Для решения задачи не используйте встроенные функции и функции из модуля math.
  6.  
  7. def my_round(number, ndigits):
  8.     """
  9.    :param number: float number
  10.    :param ndigits: number of digits after rounding up
  11.    :return: number rounded to n digits
  12.    """
  13.     stringified_number = repr(number)
  14.     signif_digits, fract_digits = stringified_number.split(".")
  15.  
  16.     signif_digits = [int(d) for d in signif_digits]
  17.     fract_digits = [int(d) for d in fract_digits]
  18.  
  19.     while len(fract_digits) > ndigits:
  20.         if fract_digits[-1] >= 5:
  21.             try:
  22.                 fract_digits[-2] = fract_digits[-2] + 1
  23.             except IndexError:
  24.                 signif_digits[-1] = signif_digits[-1] + 1
  25.                 if signif_digits[-1] == 10:
  26.                     try:
  27.                         signif_digits[-2] = signif_digits[-2] + 1
  28.                         signif_digits[-1] = 0
  29.                     except IndexError:
  30.                         signif_digits.insert(0, 1)
  31.         fract_digits = fract_digits[:-1]
  32.  
  33.     while len(fract_digits) > 0 and fract_digits[-1] == 10:
  34.         try:
  35.             fract_digits[-2] = fract_digits[-2] + 1
  36.         except IndexError:
  37.             signif_digits[-1] = signif_digits[-1] + 1
  38.             if signif_digits[-1] == 10:
  39.                 try:
  40.                     signif_digits[-2] = signif_digits[-2] + 1
  41.                     signif_digits[-1] = 0
  42.                 except IndexError:
  43.                     signif_digits.insert(0, 1)
  44.         finally:
  45.             fract_digits = fract_digits[:-1]
  46.  
  47.     signif_digits = ''.join([str(x) for x in signif_digits])
  48.     fract_digits = ''.join([str (x) for x in fract_digits])
  49.  
  50.     return float(signif_digits + '.' + fract_digits)
  51.  
  52.  
  53. print(my_round(2.1234567, 5))
  54. print(my_round(2.1999967, 5))
  55. print(my_round(2.9999967, 5))
  56. print(my_round(34325.88889,3))
  57.  
  58.  
  59. # Задание-2:
  60. # Дан шестизначный номер билета. Определить, является ли билет счастливым.
  61. # Решение реализовать в виде функции.
  62. # Билет считается счастливым, если сумма его первых и последних цифр равны.
  63. # !!!P.S.: функция не должна НИЧЕГО print'ить
  64.  
  65. def lucky_ticket(ticket_number):
  66.     """
  67.    :param ticket_number: 6 digit int number
  68.    :return: True, if lucky, False, if not
  69.    """
  70.     ticket_number = repr(ticket_number)
  71.     left_part = ticket_number[:3]
  72.     right_part = ticket_number[-3:]
  73.  
  74.     def part_sum(str_part):
  75.         counter = 0
  76.         for n in str_part:
  77.             counter += int(n)
  78.         return counter
  79.  
  80.     if part_sum(left_part) == part_sum(right_part):
  81.         return True
  82.     else:
  83.         return False
  84.  
  85. print(lucky_ticket(123006))
  86. print(lucky_ticket(12321))
  87. print(lucky_ticket(436751))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement