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
Binary file added .DS_Store
Binary file not shown.
25 changes: 25 additions & 0 deletions circle.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from math import pi

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

#Calculating perimeter of circle
def perimeter(self):
return 2 * pi * self.radius

#Calculating area of circle
def area(self):
return pi * self.radius ** 2

#Defining calculation function based on selected operation
def perform_cir_calc(self, operation: str) -> float:
if operation == 'perimeter':
return f'This circle has a perimeter of {round(self.perimeter(), 2)} cm.'
elif operation == 'area':
return f'This circle has an area of {round(self.area(), 2)} cm.'

#Converting radius input into float
def convert_radius_to_float(radius: str) -> float:
return float(radius)
26 changes: 25 additions & 1 deletion flask_app.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
from flask import Flask, render_template, request

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

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


@app.route('/')


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

return render_template('calculator.html')


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

try:
radius = convert_radius_to_float(radius=radius)
except ValueError:
return render_template('circle.html', printed_result="Radius must be a number")

if radius <= 0:
return render_template('circle.html', printed_result="Radius must be a positive number")

circle_instance = Circle(radius)
result = circle_instance.perform_cir_calc(operation=operation)

return render_template('circle.html', printed_result=result)

return render_template('circle.html')
20 changes: 20 additions & 0 deletions templates/circle.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{% extends 'layout.html' %}
{% block content %}
<h1>Circle Calculator</h1>
<form method="post">
<input type="text" name="radius" placeholder="Enter the radius in cm" required="required" />

<label for="">Operation</label>
<select id="operation" name="operation">
<option value="perimeter">perimeter</option>
<option value="area">area</option>
</select>

<button type="submit">Calculate</button>
</form>

<br>

{{ printed_result }}

{% endblock %}
1 change: 1 addition & 0 deletions templates/layout.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ <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>
<li><a href="{{ url_for('circle') }}">Circle Calculator</a></li>
</ul>
</nav></strong>
</div>
Expand Down
24 changes: 24 additions & 0 deletions test_circle.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@

#Testing both methods in circle.py
import pytest
from math import pi
from circle import Circle

# Tests for perimeter calculation with positive float input
def test_perimeter():

#creating instance for radius = 2
circle_instance = Circle(radius = 2)
expected_perim_result = f'This circle has a perimeter of {round(2 * pi * 2, 2)} cm.'
actual_perim_result = circle_instance.perform_cir_calc('perimeter')
assert actual_perim_result == expected_perim_result, "Perimeter calculation test failed!"


# Tests for area calculation
def test_area():

#creating instance for radius = 2
circle_instance = Circle(radius = 2)
expected_area_result = f'This circle has an area of {round(pi * 2 ** 2, 2)} cm.'
actual_area_result = circle_instance.perform_cir_calc('area')
assert actual_area_result == expected_area_result, "Area calculation test failed!"