Guest User

Untitled

a guest
Mar 6th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.86 KB | None | 0 0
  1. from math import *
  2.  
  3. heart = '''
  4. В каждой программе должна быть частичка любви.
  5.      .....           .....
  6.  ,ad8PPPP88b,     ,d88PPPP8ba,
  7. d8P"      "Y8b, ,d8P"      "Y8b
  8. dP'           "8a8"           `Yd
  9. 8(              "              )8
  10. I8                             8I
  11. Yb,                         ,dP
  12.  "8a,                     ,a8"
  13.    "8a,                 ,a8"
  14.      "Yba             adP"
  15.        `Y8a         a8P'
  16.          `88,     ,88'
  17.            "8b   d8"
  18.             "8b d8"
  19.              `888'
  20.                "
  21. '''
  22. helper = '''
  23. +              Плюс
  24. -              Минус
  25. *              Умножить
  26. / или :        Делить
  27. \/             Корень
  28. ** или ^       Степень
  29. %              Остаток
  30. obratnoe       Обратное число
  31. sin            Синус
  32. cos            Косинус
  33. tg             Тангенс
  34. ctg            Котангенс
  35. arcsin         Арксинус
  36. arccos         Арккосинус
  37. log            Логарифм
  38. Чтобы отредактировать опции, введите:
  39. >>> options
  40. Чтобы начать функционировать, введите число.
  41. Для прерывания работы, оставьте строку пустой и введите Enter.
  42. '''
  43.  
  44. options = {
  45.     '[1] Количество знаков после запятой': 2,
  46.     '[2] Система счисления': 10
  47. }
  48.  
  49.  
  50. def edit_options():
  51.     print('Доступные опции:')  # Опции. Пишет, какие настройки доступны
  52.     for i in range(len(options)):
  53.         print(str(options).replace('}', '').replace('{', '').replace("'", '').replace('"', '').split(', ')[i])
  54.     edit = 0
  55.     while not 0 < edit <= len(options):
  56.         edit = input('\nКакое значение вы хотите поменять?\n'
  57.                      '(Введите число от 1 до %i)\n'
  58.                      '> '
  59.                      % len(options))  # Следит за тем, чтобы пользователь не поломал опции.
  60.         try:
  61.             edit = int(edit)
  62.         except ValueError:
  63.             if edit == '':
  64.                 break  # Выход из цикла.
  65.             else:
  66.                 print('Попробуйте ввести число.')
  67.                 edit = 0
  68.     if edit != '':
  69.         if edit == 1:
  70.             edit = '[1] Количество знаков после запятой'
  71.         elif edit == 2:
  72.             edit = '[2] Система счисления'
  73.         option = input('Вы выбрали "%s".\nНа какое значение поменять: ' % edit)
  74.         try:
  75.             option = int(option)
  76.         except ValueError:
  77.             print('Нужно целое число! Выхожу из опций...')
  78.         else:
  79.             options[edit] = option
  80.             while edit == '[2] Система счисления' and not (option in (2, 8, 10, 16)):
  81.                 options[edit] = int(input(  # Защита от космических систем счисления
  82.                     'На такие системы счисления калькулятор не расчитан. Пожалуйста, введите другое.\n'
  83.                     '(2, 8, 10, 16)\n'
  84.                     '> '
  85.                 ))
  86.     print()
  87.  
  88.  
  89. # Выводы.
  90. def output(x):
  91.     if options['[2] Система счисления'] == 2:
  92.         print('\nОТВЕТ:\n', str(bin(int(x))).replace('0b', ''), '\n-- двоичная система счисления --\n')
  93.     elif options['[2] Система счисления'] == 8:
  94.         print('\nОТВЕТ:\n', str(oct(int(x))).replace('0o', ''), '\n-- восьмеричная система счисления --\n')
  95.     elif options['[2] Система счисления'] == 10:
  96.         if x * 10 % 10 == 0:
  97.             print('\nОТВЕТ:\n', int(x), '\n')
  98.         else:
  99.             if options['[1] Количество знаков после запятой'] == 0:
  100.                 print('\nОТВЕТ:\n', round(x), '\n')
  101.             else:
  102.                 print('\nОТВЕТ:\n', round(x, options['[1] Количество знаков после запятой']), '\n')
  103.     elif options['[2] Система счисления'] == 16:
  104.         print('\nОТВЕТ:\n', str(hex(int(x))).replace('0x', '').upper(), '\n-- шестнадцатеричная система счисления --\n')
  105.  
  106.  
  107. # Здесь все возможные действия.
  108. action = {
  109.     '\/': lambda x: sqrt(x),
  110.     'obratnoe': lambda x: x ** -1,
  111.     'sin': lambda x: sin(x),
  112.     'cos': lambda x: cos(x),
  113.     'tg': lambda x: tan(x),
  114.     'ctg': lambda x: 1 / tan(x),
  115.     'arcsin': lambda x: asin(x),
  116.     'arccos': lambda x: acos(x)
  117. }
  118. action_one = {
  119.     '+': lambda x, y: x + y,
  120.     '-': lambda x, y: x - y,
  121.     '*': lambda x, y: x * y,
  122.     '/': lambda x, y: x / y,
  123.     '**': lambda x, y: x ** y,
  124.     '^': lambda x, y: x ** y,
  125.     '%': lambda x, y: x % y,
  126.     'log': lambda x, y: log(x, y)
  127. }
  128.  
  129. # Начало
  130. print('Чтобы начать функционировать, введите число.\n'
  131.       'Для прерывания работы, оставьте строку пустой и введите Enter.\n'
  132.       'Для показа возможных действий, введите:\n'
  133.       '>>> help')
  134.  
  135.  
  136. # Тело
  137. a = 0
  138. while a != '':
  139.     a = input()
  140.     if a in ('help', 'h', 'п', 'помогите', 'Что я здесь делаю?'):  # Помощь новичку
  141.         print(helper)
  142.     elif a in ('pi', '3.14'):
  143.         a = pi
  144.     elif a in ('e', 'exp', '2.72', '2.71'):
  145.         a = exp(1)
  146.     try:
  147.         a = float(a)  # Пытается переделать float в int. Если не получается, делает выход или просит ввести ещё раз.
  148.     except ValueError:
  149.         if a in ('', 'exit', 'stop', 'остановись', 'выйти', 'Я хочу остановить эту штуку'):
  150.             break
  151.         elif a == 'В чём смысл жизни, вселенной и вообще?':
  152.             print(42)
  153.         elif a in ('options', 'opt', 'опц', 'опции'):
  154.             edit_options()
  155.         elif a == 'heart':
  156.             print(heart)
  157.         else:
  158.             print('Попробуйте ввести число...')
  159.     else:
  160.         deistvie = input('Выберите действие: ')  # В противном случае калькулятор начнёт работать.
  161.         if deistvie in action:
  162.             result = action[deistvie](a)
  163.             output(result)
  164.         elif deistvie in action_one:
  165.             while True:
  166.                 b = input('Введите второе число: ')
  167.                 if b in ('pi', '3.14'):
  168.                     b = pi
  169.                 elif b in ('e', 'exp', '2.72', '2.71'):
  170.                     b = exp(1)
  171.                 try:
  172.                     b = float(b)
  173.                 except ValueError:
  174.                     if b == '':
  175.                         break
  176.                     else:
  177.                         print('Второе число не должно быть не числом!\nПопробуйте снова!')
  178.                 else:
  179.                     try:
  180.                         result = action_one[deistvie](a, b)
  181.                     except ZeroDivisionError:
  182.                         print('На ноль делить нельзя! Возвращаюсь к началу.')
  183.                     else:
  184.                         output(result)
  185.                     break
  186.         else:
  187.             print('Неверное действие! Возвращаюсь в начало.')  # Ну или в противном случае идёт в начало программы.
Advertisement
Add Comment
Please, Sign In to add comment