LINUX.ORG.RU

Посоветуйте консольный калькулятор

 ,


0

1

Наверное мне на самом деле нужно что-то вроде REPL… Мои пожелания:

  1. Простая консольная тулза, моментально запускающаяся и тд.

  2. Традиционный формат записи.

  3. Поддержка всех популярных математических функций, в частности логарифмов по произвольным основаниям (или хотя бы по 2/e/10) и чтобы оно было сразу доступно, без всяких импортов.

  4. Поддержка рациональных чисел, пока получается. Чтобы 10 / 3 * 3 === 10 было. В идеале вообще символьные, но допускаю, что мне это на самом деле не надо.

  5. Поддержка какого-нибудь понятно-традиционного синтасиса для переменных, коротких функций и тд.

  6. Поддержка битовых операций, двоичного, шестнадцатеричного представления. Наверное в виде переключения формата вывода для последующих действий…

Пока пользуюсь обычным GUI-калькулятором, bc -l и python3 но это всё не очень удобно…

★★★★

Последнее исправление: vbr (всего исправлений: 1)

В реальном мире до сих пор продаются калькуляторы всевозможных форм, размеров и функционалов. У меня их 4. И не надо тыкаться носом в сосноль, можно посчитать что хочешь и когда хочешь. Автономность запредельная.

utanho ★★★★★
()
Ответ на: комментарий от no-such-file
  1. Нужные функции спрятаны за импортом. Наверное как-то можно настроить это…

  2. Нет рациональных чисел, все - плавающие. Это не критично, но хотелось бы.

  3. Вроде нет никакого способа настроить формат ввода-вывода. Сейчас я пишу "0x%08x" % (0x12345 + 0x00a67) чтобы работать с hex. А хочу написать set-number-format 0x08x один раз и в последующем писать 12345 + a67. И чтобы оно форматировало с пробелами и тд.

vbr ★★★★
() автор топика
Ответ на: комментарий от vbr

Если так хочется рациональных чисел и символьных вычислений, то возможно, подойдёт maxima.

https://maxima.sourceforge.io/ru/maxima-tarnavsky-3.html

https://www.kv.by/content/323704-matematicheskaya-sistema-maxima

annulen ★★★★★
()
Последнее исправление: annulen (всего исправлений: 3)
Ответ на: комментарий от vbr

Так в Питоне ты можешь сделать скрипт инициализации и там наворотить нужных тебе функций. Получится отличный программируемый калькулятор со встроенным Питоном. Если не учитывать требование пункта 2 то сложно представить что-то лучше.

urxvt ★★★★★
()

Я python использую вместо компилятора. Удобно. Да и если вдруг захочется что попродвинутее сделать, вроде циклов, можно замутить за одно. Разве что from math import * написать в конфиг по умолчанию, если часто юзается именно как калькулятор, чтобы всякие факториалы были доступны.

Да и формат записи в принципе достаточно близок к стандартному, разве что возведение в степень **, а не ^, но к этому легко привыкнуть.

А так ещё есть Genius. Я какое-то время им пользовался, но пришёл к выводу, что мне питон как-то сподручнее и привычнее.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 2)
Ответ на: комментарий от CrX

Да, наверное этим путём пойду, если другие варианты не устроят. Вроде вывод чисел в hex через sys.displayhook можно сделать. Ввод, видимо, не получится, ну и ладно.

vbr ★★★★
() автор топика
Последнее исправление: vbr (всего исправлений: 1)
Ответ на: комментарий от vbr

А тебе они всегда в hex нужны, или иногда? Я вот так делаю, через f-строки и форматирование стандартное питонье:

>>> f"{255-16:x}"
'ef'
>>> f"{0x100-0x01:x}"
'ff'
>>> example = 2**20
>>> f"{example:x}"
'100000'

Если прям постоянно не надо, то в принципе удобно.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от vbr

Нужные функции спрятаны за импортом

$ echo "from math import *" >> ~/pythonstarup.py
$ echo "export PYTHONSTARTUP=~/pythonstarup.py" >> ~/.bashrc
$ echo "alias p='python -q'" >> ~/.bashrc
$ . ~/.bashrc
$ p
>>> log2(256)
8.0

Нет рациональных чисел

есть модули fractions, decimal, scipy, numpy, matplotlib … да хоть ракету в космос запускай.

>>> from fractions import Fraction as F
>>> F(10) / 3 * 3
Fraction(10, 1)
>>> _/4
Fraction(5, 2)

хочу написать set-number-format 0x08x один раз

посмотри на sys.displayhook. можно сделать что-то вроде этого:

import sys

def enable_hex_output(digits=8):
    global _old_displayhook
    _old_displayhook = sys.displayhook
    def new_displayhook(value):
        if type(value) is int:
            print(hex(value).zfill(digits).lower())
        else:
            _old_displayhook(value)
    sys.displayhook = new_displayhook

def disable_hex_output():
    global _old_displayhook
    if '_old_displayhook' in globals():
        sys.displayhook = _old_displayhook
        del _old_displayhook

не проверял.

anonymous
()