Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from math import *
- heart = '''
- В каждой программе должна быть частичка любви.
- ..... .....
- ,ad8PPPP88b, ,d88PPPP8ba,
- d8P" "Y8b, ,d8P" "Y8b
- dP' "8a8" `Yd
- 8( " )8
- I8 8I
- Yb, ,dP
- "8a, ,a8"
- "8a, ,a8"
- "Yba adP"
- `Y8a a8P'
- `88, ,88'
- "8b d8"
- "8b d8"
- `888'
- "
- '''
- helper = '''
- + Плюс
- - Минус
- * Умножить
- / или : Делить
- \/ Корень
- ** или ^ Степень
- % Остаток
- obratnoe Обратное число
- sin Синус
- cos Косинус
- tg Тангенс
- ctg Котангенс
- arcsin Арксинус
- arccos Арккосинус
- log Логарифм
- Чтобы отредактировать опции, введите:
- >>> options
- Чтобы начать функционировать, введите число.
- Для прерывания работы, оставьте строку пустой и введите Enter.
- '''
- options = {
- '[1] Количество знаков после запятой': 2,
- '[2] Система счисления': 10
- }
- def edit_options():
- print('Доступные опции:') # Опции. Пишет, какие настройки доступны
- for i in range(len(options)):
- print(str(options).replace('}', '').replace('{', '').replace("'", '').replace('"', '').split(', ')[i])
- edit = 0
- while not 0 < edit <= len(options):
- edit = input('\nКакое значение вы хотите поменять?\n'
- '(Введите число от 1 до %i)\n'
- '> '
- % len(options)) # Следит за тем, чтобы пользователь не поломал опции.
- try:
- edit = int(edit)
- except ValueError:
- if edit == '':
- break # Выход из цикла.
- else:
- print('Попробуйте ввести число.')
- edit = 0
- if edit != '':
- if edit == 1:
- edit = '[1] Количество знаков после запятой'
- elif edit == 2:
- edit = '[2] Система счисления'
- option = input('Вы выбрали "%s".\nНа какое значение поменять: ' % edit)
- try:
- option = int(option)
- except ValueError:
- print('Нужно целое число! Выхожу из опций...')
- else:
- options[edit] = option
- while edit == '[2] Система счисления' and not (option in (2, 8, 10, 16)):
- options[edit] = int(input( # Защита от космических систем счисления
- 'На такие системы счисления калькулятор не расчитан. Пожалуйста, введите другое.\n'
- '(2, 8, 10, 16)\n'
- '> '
- ))
- print()
- # Выводы.
- def output(x):
- if options['[2] Система счисления'] == 2:
- print('\nОТВЕТ:\n', str(bin(int(x))).replace('0b', ''), '\n-- двоичная система счисления --\n')
- elif options['[2] Система счисления'] == 8:
- print('\nОТВЕТ:\n', str(oct(int(x))).replace('0o', ''), '\n-- восьмеричная система счисления --\n')
- elif options['[2] Система счисления'] == 10:
- if x * 10 % 10 == 0:
- print('\nОТВЕТ:\n', int(x), '\n')
- else:
- if options['[1] Количество знаков после запятой'] == 0:
- print('\nОТВЕТ:\n', round(x), '\n')
- else:
- print('\nОТВЕТ:\n', round(x, options['[1] Количество знаков после запятой']), '\n')
- elif options['[2] Система счисления'] == 16:
- print('\nОТВЕТ:\n', str(hex(int(x))).replace('0x', '').upper(), '\n-- шестнадцатеричная система счисления --\n')
- # Здесь все возможные действия.
- action = {
- '\/': lambda x: sqrt(x),
- 'obratnoe': lambda x: x ** -1,
- 'sin': lambda x: sin(x),
- 'cos': lambda x: cos(x),
- 'tg': lambda x: tan(x),
- 'ctg': lambda x: 1 / tan(x),
- 'arcsin': lambda x: asin(x),
- 'arccos': lambda x: acos(x)
- }
- action_one = {
- '+': lambda x, y: x + y,
- '-': lambda x, y: x - y,
- '*': lambda x, y: x * y,
- '/': lambda x, y: x / y,
- '**': lambda x, y: x ** y,
- '^': lambda x, y: x ** y,
- '%': lambda x, y: x % y,
- 'log': lambda x, y: log(x, y)
- }
- # Начало
- print('Чтобы начать функционировать, введите число.\n'
- 'Для прерывания работы, оставьте строку пустой и введите Enter.\n'
- 'Для показа возможных действий, введите:\n'
- '>>> help')
- # Тело
- a = 0
- while a != '':
- a = input()
- if a in ('help', 'h', 'п', 'помогите', 'Что я здесь делаю?'): # Помощь новичку
- print(helper)
- elif a in ('pi', '3.14'):
- a = pi
- elif a in ('e', 'exp', '2.72', '2.71'):
- a = exp(1)
- try:
- a = float(a) # Пытается переделать float в int. Если не получается, делает выход или просит ввести ещё раз.
- except ValueError:
- if a in ('', 'exit', 'stop', 'остановись', 'выйти', 'Я хочу остановить эту штуку'):
- break
- elif a == 'В чём смысл жизни, вселенной и вообще?':
- print(42)
- elif a in ('options', 'opt', 'опц', 'опции'):
- edit_options()
- elif a == 'heart':
- print(heart)
- else:
- print('Попробуйте ввести число...')
- else:
- deistvie = input('Выберите действие: ') # В противном случае калькулятор начнёт работать.
- if deistvie in action:
- result = action[deistvie](a)
- output(result)
- elif deistvie in action_one:
- while True:
- b = input('Введите второе число: ')
- if b in ('pi', '3.14'):
- b = pi
- elif b in ('e', 'exp', '2.72', '2.71'):
- b = exp(1)
- try:
- b = float(b)
- except ValueError:
- if b == '':
- break
- else:
- print('Второе число не должно быть не числом!\nПопробуйте снова!')
- else:
- try:
- result = action_one[deistvie](a, b)
- except ZeroDivisionError:
- print('На ноль делить нельзя! Возвращаюсь к началу.')
- else:
- output(result)
- break
- else:
- print('Неверное действие! Возвращаюсь в начало.') # Ну или в противном случае идёт в начало программы.
Advertisement
Add Comment
Please, Sign In to add comment