Skip to content

Commit c784ecc

Browse files
Merge pull request steam-bell-92#160 from NileshRaut2601/fibbonacci
Added turtle graphics in Fibonacci-series
2 parents 96990cd + 55185ab commit c784ecc

1 file changed

Lines changed: 113 additions & 10 deletions

File tree

Lines changed: 113 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,118 @@
1-
# 0,1,1,2,3,5,8,13,...
1+
import time
2+
import turtle
23

3-
print("🔢 Fibonacci Series Generator 🔢")
4-
print("📐 Pattern: 0, 1, 1, 2, 3, 5, 8, 13...\n")
54

6-
series = [0, 1]
7-
n = int(input("➡️ Enter number of terms: "))
5+
def build_fibonacci_series(term_count):
6+
if term_count <= 0:
7+
return []
88

9-
while len(series) < n:
10-
series.append(series[-1] + series[-2])
9+
series = [0]
1110

12-
print("\n✨ Fibonacci Series:")
13-
print(" → ".join(map(str, series)))
11+
if term_count == 1:
12+
return series
1413

15-
print(f"\n📊 Sum of {len(series)} terms: {sum(series)}")
14+
series.append(1)
15+
16+
while len(series) < term_count:
17+
series.append(series[-1] + series[-2])
18+
19+
return series
20+
21+
22+
def draw_dotted_arc(pen, screen, radius, extent, dot_color, dot_size=7, step_degrees=3, join_delay=0.008):
23+
steps = max(1, int(abs(extent) / step_degrees))
24+
arc_step = extent / steps
25+
26+
for _ in range(steps):
27+
pen.dot(dot_size, dot_color)
28+
pen.circle(radius, arc_step)
29+
screen.update()
30+
time.sleep(join_delay)
31+
32+
33+
def show_fibonacci_curve(series):
34+
35+
curve_terms = series[1:13] if len(series) > 13 else series[1:]
36+
if not curve_terms:
37+
curve_terms = [0]
38+
39+
positive_values = [value for value in curve_terms if value > 0]
40+
max_value = max(positive_values, default=1)
41+
42+
scale = max(6, min(20, 200 // max_value if max_value else 6))
43+
44+
screen_height = 720
45+
screen = turtle.Screen()
46+
screen.title("Fibonacci Curve")
47+
screen.bgcolor("white")
48+
screen.setup(width=900, height=screen_height)
49+
screen.tracer(0)
50+
51+
pen = turtle.Turtle()
52+
pen.hideturtle()
53+
pen.speed(0)
54+
pen.penup()
55+
pen.pensize(1)
56+
57+
title_y = screen_height // 2 - 40
58+
pen.goto(0, title_y)
59+
pen.color("#111827")
60+
pen.write("Fibonacci Curve", align="center", font=("Arial", 18, "bold"))
61+
62+
pen.goto(0, title_y - 28)
63+
pen.color("#374151")
64+
pen.write("Drawing... (click to close when finished)", align="center", font=("Arial", 10, "normal"))
65+
66+
start_x = -120
67+
start_y = -120
68+
colors = ["#0ea5e9", "#10b981", "#f59e0b", "#f97316", "#8b5cf6"]
69+
70+
pen.goto(start_x, start_y)
71+
pen.setheading(0)
72+
73+
for index, value in enumerate(curve_terms):
74+
radius = max(10, value * scale) if value > 0 else 10
75+
color = colors[index % len(colors)]
76+
pen.pencolor(color)
77+
draw_dotted_arc(pen, screen, radius, 90, color, dot_size=6, step_degrees=4, join_delay=0.004)
78+
pen.left(90)
79+
80+
pen.penup()
81+
pen.goto(0, start_y - 30)
82+
pen.color("#111827")
83+
pen.write("Done — click anywhere to close", align="center", font=("Arial", 10, "normal"))
84+
85+
screen.update()
86+
screen.exitonclick()
87+
88+
89+
def main():
90+
print("🔢 Fibonacci Series Generator 🔢")
91+
print("📐 Pattern: 0, 1, 1, 2, 3, 5, 8, 13...\n")
92+
93+
while True:
94+
try:
95+
term_count = int(input("➡️ Enter number of terms: "))
96+
if term_count <= 0:
97+
print("❌ Please enter a positive whole number.\n")
98+
continue
99+
break
100+
except ValueError:
101+
print("❌ Invalid input! Please enter a whole number.\n")
102+
103+
series = build_fibonacci_series(term_count)
104+
105+
print("\n✨ Fibonacci Series:")
106+
print(" → ".join(map(str, series)))
107+
print(f"\n📊 Sum of {len(series)} terms: {sum(series)}")
108+
109+
try:
110+
show_fibonacci_curve(series)
111+
except turtle.Terminator:
112+
print("\n⚠️ Turtle window was closed before drawing finished.")
113+
except Exception as error:
114+
print(f"\n⚠️ Graphical view could not be displayed: {error}")
115+
116+
117+
if __name__ == "__main__":
118+
main()

0 commit comments

Comments
 (0)