Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions circle.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import math

class Circle:
def __init__(self, radius):
self.radius = radius

def calculate_perimeter(self):
return 2 * math.pi * self.radius

def calculate_area(self):
return math.pi * (self.radius ** 2)
38 changes: 37 additions & 1 deletion flask_app.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from flask import Flask, render_template, request

from helper import perform_calculation, convert_to_float
from circle import Circle
from test_circle import test_circle

app = Flask(__name__) # create the instance of the flask class

Expand Down Expand Up @@ -38,3 +39,38 @@ def calculate():
return render_template('calculator.html', printed_result="You cannot divide by zero")

return render_template('calculator.html')



# new route for circle calculations

@app.route('/circle', methods=['GET', 'POST'])
def calculate_circle():
if request.method == 'POST':
radius = request.form['radius']
operation = request.form['operation']

try:
radius = float(radius)
circle = Circle(radius)
if operation == 'area':
result = circle.calculate_area()
result_message = "The area of the circle"
elif operation == 'perimeter':
result = circle.calculate_perimeter()
result_message = "The perimeter of the circle"
else:
raise ValueError("Invalid operation.")
except ValueError as e:
return render_template('calculator_circle.html', error=str(e))
except Exception:
return render_template('calculator_circle.html', error="Error encountered. Please try again.")

return render_template('calculator_circle.html', result=result, result_message=result_message)
else:
return render_template('calculator_circle.html')



if __name__ == '__main__':
app.run(debug=True)
2 changes: 1 addition & 1 deletion templates/calculator.html
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,4 @@ <h1>Calculator</h1>

{{ printed_result }}

{% endblock %}
{% endblock %}
29 changes: 29 additions & 0 deletions templates/calculator_circle.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{% extends 'layout.html' %}
{% block content %}
<h1>Circle Calculator</h1>
<form method="post">
<input type="text" name="radius" placeholder="Enter the radius" required="required" />
<!-- Add radio buttons for operation selection -->
<div>
<input type="radio" id="area" name="operation" value="area" checked>
<label for="area">Area</label>
</div>
<div>
<input type="radio" id="perimeter" name="operation" value="perimeter">
<label for="perimeter">Perimeter</label>
</div>
<button type="submit">Calculate</button>
</form>

<br>

<!-- Display result -->
{% if error %}
<p>Error: {{ error }}</p>
{% else %}
{% if result %}
<p>{{ result_message }}: {{ result }}</p>
{% endif %}
{% endif %}
{% endblock %}

10 changes: 6 additions & 4 deletions templates/layout.html
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,22 @@
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='main.css') }}">
</head>
<body>
<body>
<header>
<div id="navbar">
<h1 class="logo"><a href="{{ url_for('home') }}">Home</a></h1>
<strong><nav>
<ul class="menu">
<li><a href="{{ url_for('calculate') }}">General Calculator</a></li>
<!-- New list item for the Circle Calculator -->
<li><a href="{{ url_for('calculate_circle') }}">Circle Calculator</a></li>
</ul>
</nav></strong>
</div>
</header>
<div class="container">
<div class="container">
{% block content %}
{% endblock %}
</div>
</body>
</html>
</body>
</html>
9 changes: 9 additions & 0 deletions test_circle.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from circle import Circle

def test_circle(radius : float, operation : str) -> float:
circle_instance = Circle(radius)
if operation == "area":
result = circle_instance.calculate_area()
else:
result = circle_instance.calculate_perimeter()
return result