A full featured rpn calculator

# RPN Calculator by Akbar BadShah

It's a full-fledged rpn calculator I made to practice my pythonic skills. Works fine to the best of my knowledge, but you're still welcome to share your thoughts, add features, report and correct bugs.

# New Features!

• + : Take 2 numbers from the stack, add them and put the result in the stack
• - : Take 2 numbers from the stack, substracte them and put the result in the stack
• * : Take 2 numbers from the stack, mul them and put the result in the stack
• / : Take 2 numbers from the stack, divise them and put the result in the stack
• cla : Clear both stack and variable
• clr : Empty the stack
• clv : Clear both stack and variable
• ! : None
• != : Return True if last two numbers in stack are equal, False otherwise
• % : Take 2 integers from the stack, divide them and put the remainder in the stack
• ++ : Increment an integer
• -- : Decrement an integer
• & : Take 2 numbers from the stack, apply a bitwise "and" and put the result in the stack
• | : Take 2 numbers from the stack, apply a bitwise "or" and put the result in the stack
• ^ : Take 2 numbers from the stack, apply a bitwise "xor" and put the result in the stack
• ~ : Take 2 numbers from the stack, apply a bitwise "xor" and put the result in the stack
• << : Take 2 numbers from the stack, apply a left shift and put the result in the stack
• >> : Take 2 numbers from the stack, apply a right shift and put the result in the stack
• && : Perform boollean AND operation on two values and output the result (not added to the stack)
• || : Perform boollean OR operation on two values and output the result (not added to the stack)
• ^^ : Perform boolean XOR operation on two values and output the result (not added to the stack)
• < : Smaller than operation on two values and output the result (not added to the stack)
• <= : Smaller than or equal to operation on two values and output the result (not added to the stack)
• == : Equal to operation on two values and output the result (not added to the stack)
• > : Greater than operation on two values and output the result (not added to the stack)
• >= : Greater than operation on two values and output the result (not added to the stack)
• acos : Take arc cosine on a value and output the result (also added to the stack)
• asin : Take arc sine on a value and output the result (also added to the stack)
• atan : Take arc tangent on a value and output the result (also added to the stack)
• cos : Take cosine on a value and output the result (also added to the stack)
• cosh : Take arc hyperbolic cosine on a value and output the result (also added to the stack)
• sin : Take sine on a value and output the result (also added to the stack)
• sinh : Take hyperbolic sine on a value and output the result (also added to the stack)
• tanh : Take hyperbolic tangent on a value and output the result (also added to the stack)
• ceil : Take ceil of an integer and output the result (also added to the stack)
• floor : Take floor of an integer and output the result (also added to the stack)
• round : Take round of an integer and output the result (also added to the stack)
• ip : Separates int from floating part of a decimal number and output the result (also added to the stack)
• fp : separates floating part of a decimal number and output the result (also added to the stack)
• abs : Take ceil of an integer and output the result (also added to the stack)
• max : Take maximum value of the stack and output the result (also removed from the stack)
• min : Take minimum value of the stack and output the result (also removed from the stack)
• hex : Change display mode to hex
• bin : Change display mode to binary
• dec : Change display mode to decimal
• e : None
• pi : None
• rand : None
• exp : Apply e**x to the last number of the stack
• fact : Push factorial of the last number to the stack
• sqrt : Push factorial of the last number to the stack
• ln : Apply log10 to the last number of the stack
• log : Apply log10 to the last number of the stack
• pow : Take 2 numbers from the stack, apply power and put the result in the stack
• pick : Pick the nth item form stack
• repeat : Repeat an operation n times
• drop : Drop the top most item from the stack
• dropn : Drop the n top most items from the stack
• dup : Duplicates the top item from the stack
• dupn : Duplicates n top items of thew stack
• roll : Roll the stack upwards by n
• rolld : Roll the stack downwards by n
• stack : Toggles stack display from horizontal to vertical
• swap : Swap the top 2 stack items
• x= : Assigns a variable, e.g. '1024 x='
• help : Print help; Same as pol --list
• exit : Quit the program

### Available Modes

• For one time result of a single line statement, do:

rpn 3 2 + #(should exit outputting 5)

• To solve statements from a file before entering shell, do:

rpn --file #path

• To simply enter the shell, do:

rpn

### Todos

• Write MORE Tests or just test if everything works fine.

MIT

Free Software, Hell Yeah!