From bfc9e7ba385720073f27d1648ef907d0cd2d9027 Mon Sep 17 00:00:00 2001 From: Salvatore Fede Date: Thu, 13 Nov 2025 17:22:31 +0100 Subject: [PATCH 1/4] feat: implementazione di una calcolatrice in Python --- src/calculator.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/calculator.py b/src/calculator.py index 5eb03460..934e0222 100644 --- a/src/calculator.py +++ b/src/calculator.py @@ -10,3 +10,16 @@ # Multiplication: 8 # Division: 2 # + +def operazioni(a, b): + print("Somma:", a + b) + print("Differenza:", a - b) + print("Prodotto:", a * b) + if (b == 0): + print("Divisione non possibile. Il divisore è 0.") + else: + print("Divisione:", a / b) + +a = int(input("Inserisci il primo numero: ")) +b = int(input("Inserisci il secondo numero: ")) +operazioni(a, b) \ No newline at end of file From a4f7780167a0c703a7117d1c53f65e9f5eedd72a Mon Sep 17 00:00:00 2001 From: Salvatore Fede Date: Sun, 16 Nov 2025 23:39:03 +0100 Subject: [PATCH 2/4] chore: aggiunti i tipi alla funzione, ottimizzato il codice secondo le richieste della pipeline di verifica dello stile --- src/calculator.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/calculator.py b/src/calculator.py index 934e0222..da71b699 100644 --- a/src/calculator.py +++ b/src/calculator.py @@ -11,15 +11,15 @@ # Division: 2 # -def operazioni(a, b): - print("Somma:", a + b) - print("Differenza:", a - b) - print("Prodotto:", a * b) - if (b == 0): - print("Divisione non possibile. Il divisore è 0.") - else: - print("Divisione:", a / b) +def operazioni(num1:int, num2: int) -> int: + print("Somma:", a + b) + print("Differenza:", a - b) + print("Prodotto:", a * b) + if b == 0: + print("Divisione non possibile. Il divisore è 0.") + else: + print("Divisione:", a / b) a = int(input("Inserisci il primo numero: ")) b = int(input("Inserisci il secondo numero: ")) -operazioni(a, b) \ No newline at end of file +operazioni(a, b) From 7a3596cdf41a5263da26a8603ccc91739f668d80 Mon Sep 17 00:00:00 2001 From: Salvatore Fede Date: Tue, 18 Nov 2025 12:06:24 +0100 Subject: [PATCH 3/4] chore: migliorie allo stile del codice --- src/calculator.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/calculator.py b/src/calculator.py index da71b699..47898bc6 100644 --- a/src/calculator.py +++ b/src/calculator.py @@ -11,14 +11,14 @@ # Division: 2 # -def operazioni(num1:int, num2: int) -> int: - print("Somma:", a + b) - print("Differenza:", a - b) - print("Prodotto:", a * b) - if b == 0: +def operazioni(num1:int, num2: int) -> None: + print("Somma:", num1 + num2) + print("Differenza:", num1 - num2) + print("Prodotto:", num1 * num2) + if num2 == 0: print("Divisione non possibile. Il divisore è 0.") else: - print("Divisione:", a / b) + print("Divisione:", num1 / num2) a = int(input("Inserisci il primo numero: ")) b = int(input("Inserisci il secondo numero: ")) From 31aa1838a4dfbc2f6e1042b0f1a24e40b5d15a10 Mon Sep 17 00:00:00 2001 From: Salvatore Fede Date: Tue, 25 Nov 2025 22:16:07 +0100 Subject: [PATCH 4/4] feat: nuova implementazione della calcolatrice, unit-test annesso --- .gitignore | 1 + src/calculator.py | 40 +++++++++++---- tests/test_calculator.py | 105 +++++++++++++++++++++++++++++++++++++++ tests/test_sum.py | 7 --- 4 files changed, 136 insertions(+), 17 deletions(-) create mode 100644 tests/test_calculator.py delete mode 100644 tests/test_sum.py diff --git a/.gitignore b/.gitignore index 371163fd..98981f63 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ **/*.pyc **/.DS_Store .coverage +**/venv \ No newline at end of file diff --git a/src/calculator.py b/src/calculator.py index 47898bc6..55bd3828 100644 --- a/src/calculator.py +++ b/src/calculator.py @@ -11,15 +11,35 @@ # Division: 2 # -def operazioni(num1:int, num2: int) -> None: - print("Somma:", num1 + num2) - print("Differenza:", num1 - num2) - print("Prodotto:", num1 * num2) + +def addizione(num1: float, num2: float) -> float: + return num1 + num2 + + +def sottrazione(num1: float, num2: float) -> float: + return num1 - num2 + + +def moltiplicazione(num1: float, num2: float) -> float: + return num1 * num2 + + +def divisione(num1: float, num2: float) -> float | str: if num2 == 0: - print("Divisione non possibile. Il divisore è 0.") - else: - print("Divisione:", num1 / num2) + return "incalcolabile. Divisione per zero non consentita." + return num1 / num2 + + +def prendi_input() -> tuple[float, float]: + num1 = float(input("Inserisci il primo numero: ")) + num2 = float(input("Inserisci il secondo numero: ")) + return num1, num2 + + +if __name__ == "__main__": + a, b = prendi_input() -a = int(input("Inserisci il primo numero: ")) -b = int(input("Inserisci il secondo numero: ")) -operazioni(a, b) + print("La somma è", addizione(a, b)) + print("La differenza è", sottrazione(a, b)) + print("Il prodotto è", moltiplicazione(a, b)) + print("Il quoziente è", divisione(a, b)) diff --git a/tests/test_calculator.py b/tests/test_calculator.py new file mode 100644 index 00000000..52e90463 --- /dev/null +++ b/tests/test_calculator.py @@ -0,0 +1,105 @@ +from typing import List +import pytest +from src import calculator + + +parametri: List[dict] = [ + {"a": 1, "b": 2, "ris_addiz": 3, "ris_sottr": -1, "ris_molti": 2, "ris_divis": 0.5}, + { + "a": -1, + "b": 1, + "ris_addiz": 0, + "ris_sottr": -2, + "ris_molti": -1, + "ris_divis": -1, + }, + { + "a": -1, + "b": -2, + "ris_addiz": -3, + "ris_sottr": 1, + "ris_molti": 2, + "ris_divis": 0.5, + }, + {"a": 0, "b": 5, "ris_addiz": 5, "ris_sottr": -5, "ris_molti": 0, "ris_divis": 0}, + { + "a": 0, + "b": 0, + "ris_addiz": 0, + "ris_sottr": 0, + "ris_molti": 0, + "ris_divis": "incalcolabile. Divisione per zero non consentita.", + }, + { + "a": 1000, + "b": 999, + "ris_addiz": 1999, + "ris_sottr": 1, + "ris_molti": 999000, + "ris_divis": 1.001001001, + }, + { + "a": 1.5, + "b": 2.5, + "ris_addiz": 4.0, + "ris_sottr": -1, + "ris_molti": 3.75, + "ris_divis": 0.6, + }, + { + "a": -1.0, + "b": 1.0, + "ris_addiz": 0.0, + "ris_sottr": -2.0, + "ris_molti": -1.0, + "ris_divis": -1.0, + }, + { + "a": 0.1, + "b": 0.2, + "ris_addiz": 0.3, + "ris_sottr": -0.1, + "ris_molti": 0.02, + "ris_divis": 0.5, + }, + { + "a": 5, + "b": 0.5, + "ris_addiz": 5.5, + "ris_sottr": 4.5, + "ris_molti": 2.5, + "ris_divis": 10.0, + }, +] + + +@pytest.mark.parametrize("test", parametri) +def test_addizione(test: dict) -> float: + ris_attuale = calculator.addizione(test["a"], test["b"]) + assert test["ris_addiz"] == pytest.approx(ris_attuale) + + +@pytest.mark.parametrize("test", parametri) +def test_sottrazione(test: dict) -> float: + ris_attuale = calculator.sottrazione(test["a"], test["b"]) + assert test["ris_sottr"] == pytest.approx(ris_attuale) + + +@pytest.mark.parametrize("test", parametri) +def test_moltiplicazione(test: dict) -> float: + ris_attuale = calculator.moltiplicazione(test["a"], test["b"]) + assert test["ris_molti"] == pytest.approx(ris_attuale) + + +@pytest.mark.parametrize("test", parametri) +def test_divisione(test: dict) -> float: + ris_attuale = calculator.divisione(test["a"], test["b"]) + assert test["ris_divis"] == pytest.approx(ris_attuale) + + +@pytest.mark.parametrize("test", parametri) +def test_input(mocker, test: dict): + mocker.patch("builtins.input", side_effect=[float(test["a"]), float(test["b"])]) + a, b = calculator.prendi_input() + assert a == test["a"] + assert b == test["b"] diff --git a/tests/test_sum.py b/tests/test_sum.py deleted file mode 100644 index 4874e5c8..00000000 --- a/tests/test_sum.py +++ /dev/null @@ -1,7 +0,0 @@ -from src.sum import sum - - -def test_sum() -> None: - assert sum(3, 4) == 7 - assert sum(0, 0) == 0 - assert sum(1, 2) == 3