From 7674f30a913a73416c6c63754742fd86c97b882f Mon Sep 17 00:00:00 2001 From: Andreas Zweili Date: Thu, 4 Nov 2021 22:16:34 +0100 Subject: [PATCH] finish the exercise --- python/currency-exchange/exchange.py | 24 +++++++++++++++++------ python/currency-exchange/exchange_test.py | 24 +++++++++++------------ 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/python/currency-exchange/exchange.py b/python/currency-exchange/exchange.py index 29019e8..4c6d5a5 100644 --- a/python/currency-exchange/exchange.py +++ b/python/currency-exchange/exchange.py @@ -6,7 +6,7 @@ def exchange_money(budget, exchange_rate): :return: float - exchanged value of the foreign currency you can receive. """ - pass + return budget / exchange_rate def get_change(budget, exchanging_value): @@ -17,7 +17,7 @@ def get_change(budget, exchanging_value): :return: float - amount left of your starting currency after exchanging. """ - pass + return budget - exchanging_value def get_value_of_bills(denomination, number_of_bills): @@ -28,7 +28,7 @@ def get_value_of_bills(denomination, number_of_bills): :return: int - total value of bills you now have. """ - pass + return denomination * number_of_bills def get_number_of_bills(budget, denomination): @@ -39,7 +39,7 @@ def get_number_of_bills(budget, denomination): :return: int - number of bills after exchanging all your money. """ - pass + return int(budget) // int(denomination) def exchangeable_value(budget, exchange_rate, spread, denomination): @@ -52,7 +52,12 @@ def exchangeable_value(budget, exchange_rate, spread, denomination): :return: int - maximum value you can get. """ - pass + percentage = spread / 100 + real_exchange_rate = exchange_rate + exchange_rate * percentage + number_of_bills = get_number_of_bills( + budget / real_exchange_rate, denomination) + + return number_of_bills * denomination def non_exchangeable_value(budget, exchange_rate, spread, denomination): @@ -65,4 +70,11 @@ def non_exchangeable_value(budget, exchange_rate, spread, denomination): :return: int non-exchangeable value. """ - pass + percentage = spread / 100 + real_exchange_rate = exchange_rate + exchange_rate * percentage + number_of_bills = get_number_of_bills( + budget / real_exchange_rate, denomination) + + foreign = number_of_bills * denomination + + return int(budget / real_exchange_rate - foreign) diff --git a/python/currency-exchange/exchange_test.py b/python/currency-exchange/exchange_test.py index 0eb24a2..8c8ef53 100644 --- a/python/currency-exchange/exchange_test.py +++ b/python/currency-exchange/exchange_test.py @@ -11,43 +11,42 @@ from exchange import ( class CurrencyExchangeTest(unittest.TestCase): - @pytest.mark.task(taskno=1) def test_exchange_money(self): input_data = [(100000, 0.84), (700000, 10.1)] output_data = [119047, 69306] for variant, (input_data, output_data) in enumerate(zip(input_data, output_data), start=1): with self.subTest(f"variation #{variant}", input_data=input_data, output_data=output_data): - self.assertEqual(int(exchange_money(input_data[0], input_data[1])), output_data) + self.assertEqual( + int(exchange_money(input_data[0], input_data[1])), output_data) - @pytest.mark.task(taskno=2) def test_get_change(self): input_data = [(463000, 5000), (1250, 120), (15000, 1380)] output_data = [458000, 1130, 13620] for variant, (input_data, output_data) in enumerate(zip(input_data, output_data), start=1): with self.subTest(f"variation #{variant}", input_data=input_data, output_data=output_data): - self.assertEqual(get_change(input_data[0], input_data[1]), output_data) + self.assertEqual(get_change( + input_data[0], input_data[1]), output_data) - @pytest.mark.task(taskno=3) def test_get_value_of_bills(self): input_data = [(10000, 128), (50, 360), (200, 200)] output_data = [1280000, 18000, 40000] for variant, (input_data, output_data) in enumerate(zip(input_data, output_data), start=1): with self.subTest(f"variation #{variant}", input_data=input_data, output_data=output_data): - self.assertEqual(get_value_of_bills(input_data[0], input_data[1]), output_data) + self.assertEqual(get_value_of_bills( + input_data[0], input_data[1]), output_data) - @pytest.mark.task(taskno=4) def test_get_number_of_bills(self): input_data = [(163270, 50000), (54361, 1000)] output_data = [3, 54] for variant, (input_data, output_data) in enumerate(zip(input_data, output_data), start=1): with self.subTest(f"variation #{variant}", input_data=input_data, output_data=output_data): - self.assertEqual(get_number_of_bills(input_data[0], input_data[1]), output_data) + self.assertEqual(get_number_of_bills( + input_data[0], input_data[1]), output_data) - @pytest.mark.task(taskno=5) def test_exchangeable_value(self): inputs = [ (100000, 10.61, 10, 1), @@ -60,9 +59,9 @@ class CurrencyExchangeTest(unittest.TestCase): for variant, (inputs, output_data) in enumerate(zip(inputs, output_data), start=1): with self.subTest(f"variation #{variant}", inputs=inputs, output_data=output_data): - self.assertEqual(exchangeable_value(inputs[0], inputs[1], inputs[2], inputs[3]), output_data) + self.assertEqual(exchangeable_value( + inputs[0], inputs[1], inputs[2], inputs[3]), output_data) - @pytest.mark.task(taskno=6) def test_non_exchangeable_value(self): inputs = [ (100000, 10.61, 10, 1), @@ -74,4 +73,5 @@ class CurrencyExchangeTest(unittest.TestCase): for variant, (inputs, output_data) in enumerate(zip(inputs, output_data), start=1): with self.subTest(f"variation #{variant}", inputs=inputs, output_data=output_data): - self.assertEqual(non_exchangeable_value(inputs[0], inputs[1], inputs[2], inputs[3]), output_data) + self.assertEqual(non_exchangeable_value( + inputs[0], inputs[1], inputs[2], inputs[3]), output_data)