PyPrintPi på en Raspberry Pi (13 / 23 steg)

Steg 13: Skapa kod att använda med termoskrivaren

Vi kan fortfarande använda bättre metoder för att beräkna π som Chudnovsky algoritmen eller Gauss – Legendre algoritmen, men matematik börjar bli ett mycket mer komplicerat och jag föredrar att använda metoder som jag förstår. Eftersom vi kommer att kunna skriva ut resultaten och skrivarens hastighet är begränsad, behöver vårt program bara skriva ut så fort som skrivaren.

Vi har två huvudalternativ för ett program som skriver ut π: antingen beräknas π till ett stort antal decimaler och sedan skriver ut det, eller programmet kan skriva ut de tio första siffrorna i π medan beräkningen av de närmaste tio siffrorna i π. Jag bestämde mig att beräkna π först sedan skriva ut det, eftersom detta kräver mycket mindre arbete.

För att vara tryckt våra program behov att skapa ett textdokument med värdet på π i det (gauss_pi_method_save_to_text.py):

från decimal import *

Importera tid

def gauss_pi_method():
Return 4*(12*arctan(18) + 8*arctan(57) - 5*arctan(239))

def arctan(x):

en = 10 ** getcontext () .prec

xSquaredPlusOne = (x * x) + 1
fract = (x * en) / / xSquaredPlusOne
Total = fract
numurator_num = 2
medan 1:
nämnaren = (numurator_num + 1) * xSquaredPlusOne
fract * = numurator_num
fract = fract / / nämnare
om fract == 0:
Break
totala += fract
numurator_num += 2
återgå Decimal(Decimal(total)/Decimal(one))

medan 1:
#Asks användaren hur många decimaler som de vill ha det svara för att ges till
decimaler = int (input ("Ange hur många decimaler vill du ha svaret ges till:")) + 1
start_time = time.time()
getcontext () .prec = decimaler + 5 #sets precision med 4 fler decimaler än bad om.

PiEst = gauss_pi_method() #computes pi

getcontext () .prec = decimaler #this kodblock rundor pi antal decimaler som bad om
PiEst = + PiEst

end_time = time.time()

#this block sparar våra värdet på pi till pi.txt

f = öppna ("pi.txt", "w")
f.write(Str(PiEst))
f.Close()

#next line skriver ut resultaten

skriva ut ("Pi till" + str(decimals-1) + "decimaler är:" + str(PiEst))

skriva ut ("algoritmen sprang i %s sekunder" % (time.time() - starttid))

Det kommer också att vara mycket enklare att koda ett slutligt skript om vi kan skapa ett litet bibliotek med funktionen Gauss metod och funktionen arctan. Detta kommer att tillåta oss att kalla dem från valfritt program i samma katalog. När vi skapar detta bibliotek vi behöver ändra matas funktionen Gauss metod så sparar det ut till en textfil. Skapa ett bibliotek i Python är ganska lätt, vi behöver bara skapa en Python-fil med alla funktioner vi vill ta med, det är det!

Här är biblioteket (gauss_pi_lib.py):

från decimal import *

def gauss_pi_method(decimals):
getcontext () .prec = decimaler + 10 #sets precision med 10 fler decimaler än bad om.
PI = 4*(12*arctan(18) + 8*arctan(57) - 5*arctan(239))

getcontext () .prec = decimaler #this kodblock rundor pi antal decimaler som bad om
PI = + pi

f = öppna ('pi.txt', 'w') #this block sparar våra värdet på pi till pi.txt
f.write(Str(PI))
f.Close()
returnera

def arctan(x):

en = 10 ** getcontext () .prec

xSquaredPlusOne = (x * x) + 1
fract = (x * en) / / xSquaredPlusOne
Total = fract
numurator_num = 2
medan 1:
nämnaren = (numurator_num + 1) * xSquaredPlusOne
fract * = numurator_num
fract = fract / / nämnare
om fract == 0:
Break
totala += fract
numurator_num += 2
återgå Decimal(Decimal(total)/Decimal(one))

Observera att när du skapar ett bibliotek kan du lägga alla beroenden längst upp, utanför någon funktion. Nu har vi ett bibliotek och vi kan använda dess funktioner genom att kalla det från ett annat program (gauss_pi_lib_test.py):

importera gauss_pi_lib

Importera tid

medan 1:
#Asks användaren hur många decimaler som de vill ha det svara för att ges till
decimaler = int (input ("Ange hur många decimaler vill du pi för:")) + 1
start_time = time.time()

gauss_pi_lib.gauss_pi_method(decimals)

end_time = time.time()
#next raden kopierar resultat från pi.txt
f = öppna ('pi.txt', 'r')
PI = f.read()
f.Close()

skriva ut ("Pi till" + str(decimals-1) + "decimaler är:" + pi)

skriva ut ("algoritmen sprang i %s sekunder" % (time.time() - starttid))

I detta program "import gauss_pi_lib", importerar biblioteket vi just gjort. Om du kör programmet hittar du körs det samma som tidigare med undantaget att det kör omkring två gånger så långsamt. Tyvärr måste vi acceptera denna förlust i hastighet som vi kommer att använda Python 2 för att prata till skrivaren och det enklaste sättet att kommunicera mellan Python 2 och 3 är genom att spara ett program utdata till en txt-fil i ett program sedan läsa .txt filen i ett annat program körs ett annat språk.

Se Steg
Relaterade Ämnen

Raspberry Pi dokument Scanner med automatisk belasta upp till Dropbox.

Har du någonsin fått orolig när du inte har kunnat hitta en räkning eller post-it lapp som du verkligen behövs? Bra med denna Raspberry Pi dokument Scanner nu behöver du inte! Alla dina anteckningar, kvitton och handlingar kommer nu att ett klick bor...

En riktigt billig Raspberry Pi GPIO kabel

detta instructable kan nås på författarens hemsida - http://www.neatinformation.com/howto/Pi%20GPIO.html. Om du länkar till detta instructable från en annan webbplats, vänligen inkludera en länk till webbplatsen Ordentlig Information .Projektet beskr...

Öka din verklighet med iTorch raspberry pi ficklampa projektorn

UPPDATERING: Den 3 maj - spela Minecraft på den nyare iTorch :)UPPDATERING: Ny iTorch 3D tryckta version! & & Äntligen lagt upp några filmer, hoppas du gillar dem. :)Inlägg av ITorch mediedelning.https://www.Facebook.com/Photo.php?v=29239404759309...

Automatiserad Aeroponics systemet med Raspberry Pi

i detta Instructable, vi lär dig att göra en Aeroponics systemet som styrs via Raspberry Pi, och använder modulen Raspberry Pi kamera för att ta bilder av dina växter. Aeroponics är en ganska okonventionell metod av trädgårdsarbete, men det är det so...

CoPiino fuktkontroll - raspberry pi och arduino

Jag kom nyligen över en vän till mig. Vi pratade om våra senaste projekt där han slutligen berättade om sin källare som har mycket hög luftfuktighet och är för närvarande inte att bra plats där du vill köra projekt.Detta fick oss att tänka på en ny p...

Hemautomation med nod js, raspberry pi och heimcontrol

I guiden kommer att göra beskriver hur du använder heimcontrol plattform (är NodeJs program för hemautomation öppen källkod under MIT licens)Några av där funktioner:Lyhörda : responsive design ger dig bekväm kontroll hem enheter använda din smartphon...

Arduino / Raspberry Pi fallet med OpenCase

OpenCase kan du enkelt dimension och generera DXF filer för elektronik kapslingar. Du sätter i materialtjockleken, invändiga mått, och berätta det där att skära hål och utskärningar, och det gör resten. OpenSCAD används för alla beräkningar och gener...

Lätt Raspberry Pi baserad skärmsläckare/bildspel för utställningar/butik Front

På utställningar vill du ofta Visa upp ditt arbete i hopp om att locka potentiella kunder. Den här också arbeten för Fönstren av butiker att marknadsföra produkter som säljs inom. De flesta kommer helt enkelt skapa en stor fast bild affisch till stor...

Raspberry Pi I2C (Python)

i detta instructable, jag kommer att förklara hur man använder I2C på Pi, med exempel på CMPS03 kompass modulen och SRF08 ultraljud sortiment, med hjälp av python. Jag kommer att förklara rakt igenom installera OS, att se till att beroenden och allt...

Kör Linux Terminal på Windows med DHCP och Raspberry Pi

Vad du behöver:Dator med Windows installeratRaspberry Pi (jag rekommenderar B + men någon kommer att fungera)SD-kort med Raspberry Pi bild utarbetatsEthernet-kabelStrömkälla för Raspberry PiDHCP-servern (finns här)PuTTY (finns här)Steg 1: Förbered DH...

Skicka en kopia av dina bilder och videor i din Android-telefon till Raspberry Pi med Bluetooth

IntroduktionDetta instructable byggd på en tidigare instructable "vända Raspberry Pi i en Bluetooth-enhet som jag skapat.Foton och videoklipp på min Android telefon säkerhetskopieras automatiskt till Google + Foto moln. Men vill jag spara en kopia i...

Förvandla Raspberry Pi till Network File System version 4 (NFSv4) server

IntroduktionNätverk-filen System(NFS) kan samtidigt köra i version 2, 3, 4. NFS version 4(NFSv4) har flera förbättringar över NFSv2 och NFSv3. De förbättringar som jag gillar mest är:NFSv4 gör konfigurera brandväggen enkelt eftersom NFSv4 använder en...

AirPlay Radio med Raspberry Pi och WiFi

Innan jag började arbeta för Pelagicore vann jag två Raspberry Pi: s (kort RP) som de sponsrade. En eftersom jag var en av de första människorna på foss-gbg epostlistan som de började. Det är för folk från Göteborg och omgivning som vill gå med andra...

Digital notställ: Raspberry Pi + Touchscreen

IMSLP är en av de största sakerna att hända i klassisk musikvärlden under de senaste minne. För dem som inte vet, är IMSLP.org en online-bibliotek med alla noter som inte längre är under copyright-skydd. Du kan hitta ganska mycket något skrivet av Be...

Institutionen för redundans institutionen: Raspberry Pi hallon paj

Pi, naturligtvis, är ett användbart verktyg i matematik- men en Raspberry Pi är ett användbart verktyg i alla möjliga sätt. Vi är mycket glada över att äga en Raspberry Pi - som är ungefär som naken mullvad råttan datorer: det är ett kreditkort storl...

0-5V Analog insignal från Raspberry Pi ett diagram på webben

med hjälp av PIC PI expansionskort i kombination med din Raspberry Pi kommer jag visa dig hur du kan diagram analoga spänningar till CosmMaskinvara som behövs för detta projekt1 x Raspberry Pi1 x PIC PI utveckling styrelsen (du kommer att kunna köpa...

1970-talet raspberry Pi Amazon AlexaPhone

Detta är en av 1970-talet-style trimphone som jag har konverterat för att hysa en Raspberry Pi kör Amazons Alexa röstsökningstjänsten.För att använda det du bara lyfta luren, tala din fråga, hänga upp och alexas svar levereras via en inbyggd högtalar...

1981 Portable VCR Raspberry PI Media Centre

Detta är en tidig 80-Sharp VC - 2300H bärbara Videobandspelare som jag har konverterat - det har nu en Raspberry Pi i centrum, kör de utmärkta Raspbmc medierna Center software. Andra uppgraderingar inkluderar en snazzy arduino-baserad klocka och en E...

2 sätt byta med Raspberry PI och Berry IO

Min allra första instructable...Jag postat en video på youtube på ett projekt jag gjorde under min semester, här är en länk:Efter mycket mail och frågor från människor som ber om detaljerna till denna 2 sätt byta, jag bestämde mig att utarbeta detta...