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