Coinhandler 💰
A Python module to handle interacting with coins
>>> from coinhandler import CoinHandler
>>> handler = CoinHandler(
... starting_float=(2.00, 1.00, 0.50, 0.20, 0.05)
... )
>>> handler.insert(0.50)
>>> handler.insert(1.00)
>>> handler.purchase(1.25)
>>> handler.return_coins()
CoinCollection(TwentyPence(1), FivePence(1))
Installation
pipenv*
pipenv install coinhandler
pip
pip install coinhandler
From source
pip install git+git://github.com/alxwrd/coinhandler.git
*recommended
Useage
CoinHandler
A CoinHandler object can be used to manage a transaction, or a series
of transactions. To create a handler instance, it should be provided
with a starting float
(money supply).
The starting_float should be an iterable of either float or int
from coinhandler import CoinHandler
handler = CoinHandler(
starting_float=(2.00, 1.00, 0.50, 0.20, 0.05)
)
A CoinHandler object provides a simple interface for making trasactions
against the float it started with.
.available_coins -> CoinCollection
Provides access to the current supply of Coins in in the handler.
>>> handler.available_coins
CoinCollection(TwoPound(1), OnePound(1), FiftyPence(1), TwentyPence(20), FivePence(5))
.current_transaction -> Transaction
Provides access to the Coins that are part of the current transaction.
>>> handler.insert(0.50)
>>> handler.current_transaction
Transaction(FiftyPence(1))
.total() -> float
Returns the handlers current total value as a float.
>>> handler.total()
3.75
Also equivalent to:
>>> handler.available_coins.total() / 100
3.75
.insert( value )
Add a coin of value to the current_transaction.
>>> handler.insert(0.50)
>>> handler.current_transaction
Transaction(FiftyPence(1))
.purchase( value )
Moves the coins from current_transaction into the available_coins and
makes the difference in coins between the purchase value and the
current_transation.total() available in .current_transaction.
>>> handler.available_coins
CoinCollection(TwentyPence(1), FivePence(1))
>>> handler.insert(0.50)
>>> handler.purchase(0.25)
>>> handler.current_transaction
Transaction(TwentyPence(1), FivePence(1))
>>> handler.available_coins
CoinCollection(FiftyPence(1))
.return_coins() -> CoinCollection
Empties out the current_transaction and returns those coins as a
CoinCollection.
CoinCollection
A CoinCollection object represents a collection of Coins. It functions
similar to a python list, and provides some similar methods.
from coinhandler import CoinCollection
collection = CoinCollection(2.00, 1.00, 0.50)
You can also create a CoinCollection from a value. This will return the
smallest amount of Coins needed to create that value.
>>> CoinCollection.from_value(1.25)
CoinCollection(OnePound(1), TwentyPence(1), FivePence(1))
Transaction
A Transaction object is a subclass of CoinCollection, and functions
identically.
.remove_by_value( value ) -> CoinCollection
Removes coins from the collection by a value, and returns new collection with valid coins from the original collection.
>>> collection = CoinCollection(2.00, 1.00, 0.20, 0.05)
>>> collection.remove_by_value(1.25)
CoinCollection(OnePound(1), TwentyPence(1), FivePence(1))
NOTE:
.remove_by_valuewill only remove available coins from the original collection. So for the example:>>> collection = CoinCollection(2.00, 1.00, 0.20, 0.05) >>> collection.remove_by_value(1.30) CoinCollection(OnePound(1), TwentyPence(1), FivePence(0.05))Only '
1.25' is returned.
.total()
Returns the total value of the collection as a float.
>>> collection = CoinCollection(2.00, 1.00, 0.50)
>>> coins.total()
3.75
.append( value )
Adds the value to the collection.
>>> collection = CoinCollection(2.00, 1.00, 0.50)
>>> collection.append(1.00)
>>> collection.total()
4.50
.extend( iterable[values] )
Extends the collection by an iterable of values.
>>> collection = CoinCollection(2.00, 1.00, 0.50)
>>> collection.extend([1.00, 1.00])
>>> collection.total()
5.50
.remove( value )
Removes a Coin represented by value from the collection.
>>> collection = CoinCollection(2.00, 1.00, 0.50)
>>> collection.remove(1.00)
>>> collection.total()
2.50
.clear() -> CoinCollection
Removes all Coins from the collection, and returns them as a new collection.
>>> collection = CoinCollection(2.00, 1.00, 0.50)
>>> coins = collection.clear()
>>> collection.total()
0.0
>>> coins.total()
3.50
.pop( index=-1 ) -> Coin
Removes the Coin located index out of the collection and returns it.
>>> collection = CoinCollection(2.00, 1.00, 0.50)
>>> collection.pop()
FiftyPence(1)
>>> collection.pop(0)
TwoPound(1)
>>> coins.total()
1.00
As a list
For basic useage, a CoinCollection can be duck typed
as a list. It can be:
Compared to an iterable of values,
>>> collection = CoinCollection(2.00, 1.00, 0.50)
>>> assert collection = [2.00, 1.00, 0.50]
>>> assert collection = (2.00, 1.00, 0.50)
Iterated over,
>>> collection = CoinCollection(2.00, 1.00, 0.50)
>>> for coin in collection:
... print(coin)
'£2.00'
'£1.00'
'50p'
And accessed by index.
>>> collection = CoinCollection(2.00, 1.00, 0.50)
>>> collection[1]
OnePound(1)
Coin
A Coin object represents a value. Its use allows representing money
using int vs. float.
The Coin class is a factory class for all other Coins that have been defined.
It will return the highest value coin of a given value.
from coinhandler import Coin
from coinhandler.coins import OnePound, FiftyPence
assert Coin(100) == OnePound(1)
assert Coin(50) == FiftyPence(1)
When using the Coin factory class, a valid coin value should be used. Not doing so
can create undesirable Coin objects.
>>> coin = Coin(23)
OnePence(23)
# Use a CoinColletion instead!
>>> CoinCollection.from_value(23)
CoinCollection(TwentyPence(1), TwoPence(1), OnePence(1))
Coins of a specfic type can be created by just by creating an instance of them.
>>> from coinhandler.coins import OnePound
>>> OnePound()
OnePound()
All coins have a value, which is the represented as an integer.
>>> from coinhandler.coins import OnePound
>>> OnePound().value
100
Subclassing from Coin will add that coin to the available coins to be created.
>>> from coinhandler import Coin
>>> Coin(25)
FivePence(25)
>>> class Quarter(Coin):
... multiplier = 25
... def __str__(self):
... return f"{self.value}¢"
>>> coin = Coin(25)
>>> print(coin)
'25¢'
>>> coin.value
25
Metadata
Release files for coinhandler 0.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| coinhandler-0.3.tar.gz | 5.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| coinhandler-0.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 10.8 kB
Release files / coinhandler-0.3.tar.gz
| Download URL | coinhandler-0.3.tar.gz |
|---|---|
| Size | 5.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8df8705e7ad13e1e4974a142fcdd807ac63f53d5277175de9e8a42c0857f81fe
|
|
BLAKE2b-256 checksum How to use checksums |
cd56e1b803e4ea9f885d27b58d9b0415de597ccf483eaa8803d1edd3a3d41b72
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.3
|
Release files / coinhandler-0.3-py3-none-any.whl
| Download URL | coinhandler-0.3-py3-none-any.whl |
|---|---|
| Size | 5.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
eb98c048077eb93cadd3c5c3763c779df1fa92bc34d24e0b142b14c09dc22b47
|
|
BLAKE2b-256 checksum How to use checksums |
5ee5a51536c120a6aba48b395dad2ef1fc21f49eb3152d8d824520d93aca6414
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.6.3
|