Initial commit with refactor
This commit is contained in:
59
Polygon100.py
Executable file
59
Polygon100.py
Executable file
@@ -0,0 +1,59 @@
|
||||
print('**************************************')
|
||||
print ('Welcome to DumbCAD 1.01')
|
||||
print ('A Simple Programme to Draw A Regular Polygon')
|
||||
print ('')
|
||||
|
||||
#get "num_sides"
|
||||
num_sides = int(input("How many sides is the polygon to have: between 3 and 20 ?: "))
|
||||
x = (num_sides)
|
||||
|
||||
#get "length"
|
||||
length = int(input("What is the length of each side ?"))
|
||||
print('')
|
||||
|
||||
# dictionary of names "polynames"
|
||||
polynames = {
|
||||
3 : "Triangle",
|
||||
4 : "Square",
|
||||
5 : "Pentagon",
|
||||
6 : "Hexagon",
|
||||
7 : "Heptagon",
|
||||
8 : "Octagon",
|
||||
9 : "Nonagon",
|
||||
10: "Decagon",
|
||||
11: "Hendecagon",
|
||||
12: "Dodecagon",
|
||||
13: "Triskaidecagon",
|
||||
14: "Tetradecagon",
|
||||
15: "Pendedecagon",
|
||||
16: "Hexdecagon",
|
||||
17: "Heptdecagon",
|
||||
18: "Octdecagon",
|
||||
19: "Enneadecagon",
|
||||
20: "Icosagon",
|
||||
}
|
||||
# use "num_sides" to get "figure_name" from dictionary "polynames"
|
||||
figure_name = polynames[x]
|
||||
|
||||
#calculate internal angle of polygon
|
||||
int_angle = (num_sides-2)*180/num_sides
|
||||
|
||||
print (f'Okay, a {num_sides} sided polygon is called a {figure_name} and it has an internal angles of {int_angle} degrees.')
|
||||
print (f'Lets draw a regular {figure_name} with {length} long sides.')
|
||||
|
||||
import turtle
|
||||
turtle.screensize(4000,4000)
|
||||
turtle.hideturtle()
|
||||
turtle.speed(speed=1)
|
||||
turtle.bgcolor("grey")
|
||||
turtle.pen(pencolor="blue", pensize=5)
|
||||
|
||||
for i in range(num_sides):
|
||||
turtle.forward(length)
|
||||
turtle.left (180 - (int_angle))
|
||||
|
||||
turtle.penup()
|
||||
label=len(figure_name)
|
||||
turtle.goto(-label*9+length/2,-60) #start position for text
|
||||
turtle.write(figure_name, font=("Verdana",25, "normal"))
|
||||
turtle.Screen().exitonclick()
|
||||
103
refactored_polygon.py
Normal file
103
refactored_polygon.py
Normal file
@@ -0,0 +1,103 @@
|
||||
import turtle
|
||||
# Always put imports at the top
|
||||
|
||||
# We put the core logic into a function, so that in the future if we want to use one of the other functions
|
||||
# (eg the get_number function), we can simply import it from this file and use it.
|
||||
# If we left everything outside a function, the code would be run when trying to import one of the other functions
|
||||
def run():
|
||||
print('**************************************')
|
||||
print('Welcome to DumbCAD 1.01')
|
||||
|
||||
# \n adds a new line (there is one put in automatically at the end of a print statement)
|
||||
print('A Simple Programme to Draw A Regular Polygon\n')
|
||||
|
||||
# Move repeated logic out into another more general function so we can reuse code in the future
|
||||
num_sides = get_number(minimum=3, maximum=20, prompt='Please enter number of sides (between 3 and 20):')
|
||||
side_length = get_number(minimum=1, maximum=100, prompt='Please enter the length for each side:')
|
||||
|
||||
polygon_name = get_polyname(num_sides)
|
||||
|
||||
# calculate internal angle of polygon
|
||||
internal_angle = (num_sides - 2) * 180 / num_sides
|
||||
|
||||
print(
|
||||
f'Okay, a {num_sides} sided polygon is called a {polygon_name} and it has an internal angles of {internal_angle} degrees.')
|
||||
print(f'Lets draw a regular {polygon_name} with {side_length} long sides.')
|
||||
|
||||
draw_polygon(num_sides=num_sides, side_length=side_length, internal_angle=internal_angle, polygon_name=polygon_name)
|
||||
|
||||
|
||||
# A function that will keep asking until a number is supplied between min and max
|
||||
# A default value for prompt is used if not supplied
|
||||
def get_number(minimum, maximum, prompt='Please enter a number:'):
|
||||
# Check whether function was supplied with sane min and max values, quit if not
|
||||
if not int(minimum) or not int(maximum) or minimum > maximum:
|
||||
raise ValueError('Please supply valid min and max integers')
|
||||
|
||||
# Loop infinitely until we reach return clause which exits function
|
||||
while True:
|
||||
|
||||
# This block catches any errors and jumps to the 'except Exception' line below
|
||||
try:
|
||||
value = int(input(prompt + ' '))
|
||||
|
||||
# Only finish if we have a valid value
|
||||
if minimum <= value <= maximum:
|
||||
return value
|
||||
else:
|
||||
print(f"Error - number not between {minimum} and {maximum}")
|
||||
except Exception as e:
|
||||
print(e)
|
||||
|
||||
|
||||
# returns polygone name for supplied number of sides in range 3-20
|
||||
def get_polyname(sides):
|
||||
# dictionary of names "polynames"
|
||||
polynames = {
|
||||
3: "Triangle",
|
||||
4: "Square",
|
||||
5: "Pentagon",
|
||||
6: "Hexagon",
|
||||
7: "Heptagon",
|
||||
8: "Octagon",
|
||||
9: "Nonagon",
|
||||
10: "Decagon",
|
||||
11: "Hendecagon",
|
||||
12: "Dodecagon",
|
||||
13: "Triskaidecagon",
|
||||
14: "Tetradecagon",
|
||||
15: "Pendedecagon",
|
||||
16: "Hexdecagon",
|
||||
17: "Heptdecagon",
|
||||
18: "Octdecagon",
|
||||
19: "Enneadecagon",
|
||||
20: "Icosagon",
|
||||
}
|
||||
|
||||
return polynames[sides]
|
||||
|
||||
# Holds the logic to draw a polygon using turtle
|
||||
def draw_polygon(num_sides, side_length, internal_angle, polygon_name):
|
||||
turtle.screensize(4000, 4000)
|
||||
turtle.hideturtle()
|
||||
turtle.speed(speed=1)
|
||||
turtle.bgcolor("grey")
|
||||
turtle.pen(pencolor="blue", pensize=5)
|
||||
|
||||
for i in range(num_sides):
|
||||
turtle.forward(side_length)
|
||||
turtle.left(180 - internal_angle)
|
||||
|
||||
turtle.penup()
|
||||
label_length = len(polygon_name)
|
||||
turtle.goto(-label_length * 9 + label_length / 2, -60) # start position for text
|
||||
turtle.write(polygon_name, font=("Verdana", 25, "normal"))
|
||||
|
||||
# Wont close the screen until you click
|
||||
turtle.Screen().exitonclick()
|
||||
|
||||
|
||||
# This will run the run() function only if we launched this script directly
|
||||
# Eg: it will not use the run() function if this file has been loaded as an import in another script
|
||||
if __name__ == '__main__':
|
||||
run()
|
||||
Reference in New Issue
Block a user