Computes Pi to many decimal places and prints the digits in a circle.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | def pi(places=10):
"Computes pi to given number of decimal places"
# 3 + 3*(1/24) + 3*(1/24)*(9/80) + 3*(1/24)*(9/80)*(25/168)
# The numerators 1, 9, 25, ... are given by (2x + 1) ^ 2
# The denominators 24, 80, 168 are given by (16x^2 -24x + 8)
extra = 8
one = 10 ** (places+extra)
t, c, n, na, d, da = 3*one, 3*one, 1, 0, 0, 24
while t > 1:
n, na, d, da = n+na, na+8, d+da, da+32
t = t * n // d
c += t
return c // (10 ** extra)
def picirc(radius, aspect_ratio=5):
"Display the digit of pi in a circle of given radius"
display_width = int(radius * aspect_ratio + 10)
pi_str = repr(pi(int(2 * radius ** 2 * aspect_ratio)))
pos = 0
for i in range(2 * radius):
cols = int(0.5 + aspect_ratio * (radius**2 - (radius-(i+0.5))**2) ** 0.5)
print(pi_str[pos:pos+cols].center(display_width))
pos += cols
if __name__ == '__main__':
picirc(16)
|
The is a just-for-fun script that shows-off Python's long integers and simple string formatting.
Adjust the aspect ratio until the output looks nicely rounded. The ratio will vary depending on your choice of font.
31415926535897932384
6264338327950288419716939937510582
0974944592307816406286208998628034825342117
06798214808651328230664709384460955058223172535940
81284811174502841027019385211055596446229489549303819644
288109756659334461284756482337867831652712019091456485669234
6034861045432664821339360726024914127372458700660631558817488152
09209628292540917153643678925903600113305305488204665213841469519415
11609433057270365759591953092186117381932611793105118548074462379962749
5673518857527248912279381830119491298336733624406566430860213949463952247
371907021798609437027705392171762931767523846748184676694051320005681271452
63560827785771342757789609173637178721468440901224953430146549585371050792279
689258923542019956112129021960864034418159813629774771309960518707211349999998
3729780499510597317328160963185950244594553469083026425223082533446850352619311
88171010003137838752886587533208381420617177669147303598253490428755468731159562
86388235378759375195778185778053217122680661300192787661119590921642019893809525
72010654858632788659361533818279682303019520353018529689957736225994138912497217
75283479131515574857242454150695950829533116861727855889075098381754637464939319
2550604009277016711390098488240128583616035637076601047101819429555961989467678
374494482553797747268471040475346462080466842590694912933136770289891521047521
62056966024058038150193511253382430035587640247496473263914199272604269922796
782354781636009341721641219924586315030286182974555706749838505494588586926
9956909272107975093029553211653449872027559602364806654991198818347977535
66369807426542527862551818417574672890977772793800081647060016145249192
17321721477235014144197356854816136115735255213347574184946843852332
3907394143334547762416862518983569485562099219222184272550254256
887671790494601653466804988627232791786085784383827967976681
45410095388378636095068006422512520511739298489608412848
86269456042419652850222106611863067442786220391949
4504712371378696095636437191728746776465757
3962413890865832645995813390478027
59009946576407895126
cool i luv it :-)