LINUX.ORG.RU

calc.py v0.1


0

0

Вот, наваял неспешно за 2 часа. Калькулятор для коммандной строки, выражения задаются с помощью s-expressions.  Умеет пока что только 4 основных арифметических действия.

Пример использования:
$ ./calc.py '(+ 4 (- 15 (* 3 2) (/ 3 3)) 2 (+ 1 0))'
15.0

Сама программа: 
http://ifolder.ru/332829

Хочу быть обруган за неумение писать (с аргументацией и указанием "как правильно") и отправлен фсад :)

Re: calc.py v0.1

на С надо было писать.

xnix ★★ ()

Re: calc.py v0.1

нужно нормальное сообщение об ошибке а не эту белеберду.

python calc.py '(/ 3 0)'
Traceback (most recent call last):
  File "calc.py", line 130, in ?
    sys.exit(main())
  File "calc.py", line 122, in main
    result = sexpr(sys.argv[1])
  File "calc.py", line 114, in sexpr
    return div(args)
  File "calc.py", line 61, in div
    result /= float(args[i])
ZeroDivisionError: float division

xnix ★★ ()
Ответ на: Re: calc.py v0.1 от xnix

Re: calc.py v0.1

нужно, чтобы генерировал машинный код и его исполнял, с выводом ассемблерного кода для разный архитектур.

anonymous ()
Ответ на: Re: calc.py v0.1 от xnix

Re: calc.py v0.1

Это просто я забыл про /0, поправлю.

shuthdar ★★★ ()

Re: calc.py v0.1

Бог ты мой... Почто так мучаться? Если уж пишешь парсер, то прочти уж хоть чуть-чуть литературы по тематике... Хотя бы про регекспы (mastering regular expressions). В идеале -- драгонбук.

Бог в помощь.

rab_boziy ()
Ответ на: Re: calc.py v0.1 от rab_boziy

Re: calc.py v0.1

>Если уж пишешь парсер, то прочти уж хоть чуть-чуть литературы по тематике...

Этим я займусь, когда полностью напишу его по-своему. Чтоб познать все грани Ада и ощущения себе ничтожеством.

Кстати, до использования регекспов я и сам додумался, завтра буду курить.

PS Два слова из трёх букв на "б" в трёх строчках технического поста - это сильно, весьма.

shuthdar ★★★ ()
Ответ на: Re: calc.py v0.1 от shuthdar

Re: calc.py v0.1

> Этим я займусь, когда полностью напишу его по-своему. Чтоб познать все грани Ада и ощущения себе ничтожеством.

Улыбнуло.

> Кстати, до использования регекспов я и сам додумался, завтра буду курить.

http://www.piter.com/library/978531800056/

Там только зарегаться нужно.

rab_boziy ()

Re: calc.py v0.1

print eval(argv[1])

И не надо никаких s-expressions для этого Lisp уже написан :)

imp ★★ ()
Ответ на: Re: calc.py v0.1 от imp

Re: calc.py v0.1

А если в качестве аргумента юзвер передаст 'import os; os.system("rm -rf /")'?

rab_boziy ()
Ответ на: Re: calc.py v0.1 от rab_boziy

Re: calc.py v0.1

Нормальный юзер увидит кучу ругани о permission denied.

Begemoth ★★★★★ ()
Ответ на: Re: calc.py v0.1 от rab_boziy

Re: calc.py v0.1

Это если он под рутом его специально выставил, ну тогда и про sudo не стоит забывать. Хотя я ведь сказал у _нормального_ пользователя.

Begemoth ★★★★★ ()
Ответ на: Re: calc.py v0.1 от Begemoth

Re: calc.py v0.1

что только люди не придумают, чтоб нормально не работать. Ладно, Бог с ним.

rab_boziy ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.