rolisz's site

Simplu calculator în Python - partea 3

Acest post face parte dintr-o serie în care eu fac un mic calculator în Python.

Data trecută am construit arborele sintactic core­spun­ză­tor expresiei, iar acuma îl vom evalua. Aceasta este mult mai simplu decât parsarea, așa că hai să scăpăm. În final vom face apoi un REPL (read, evaluate, print loop), deci vom face o „consola” pentru cal­cu­la­torul nostru. Aceasta este utilă pentru a putea beneficia de atribuirea de valori, că altfel ele se pierd după fiecare execuție.

Să începem cu testele:

from interpreter import interpreter
from tokenizer import Tokenizer
from tree import parseTree

pT = parseTree()
tok = Tokenizer()
interp = interpreter()
Tree = pT.buildParseTree(tok.tokenize("1+2"))
assert(interp.evaluate(Tree) == 3)
Tree = pT.buildParseTree(tok.tokenize("(5+(2\*3+2))-3\*((5+6)/2-4)"))
assert(interp.evaluate(Tree) == 8.5)
Tree = pT.buildParseTree(tok.tokenize("x = 2"))
assert(interp.evaluate(Tree) 
continue.

Simplu calculator în Python - partea 2

Acest post face parte dintr-o serie în care eu fac un mic calculator în Python Data trecută ne-am ocupat de împărțirea stringului rezultat în bucăți elementare. Acum vom trece la următoarea parte: parsarea. Aceasta ne va da structura expresiei pe care vrem să o evaluăm. Dacă în urma to­k­enizării obțineam erori dacă stringul conținea caractere invalide, acum vom obține erori dacă tokenele noastre nu sunt în ordinea potrivită (dacă avem doi operatori unul după altul de exemplu) sau dacă nu sunt suficienți operanzi (numărul de paranteze deschise nu coincide cu cele închise). Este important de menționat că deocamdată nu atribuim semantică tokenelor, ci doar sintaxă. Regulile de ordine de efectuare a op­er­ați­ilor continue.

Simplu calculator în Python - partea 1

De mai multă vreme tot mă bate gândul să fac ceva in­ter­pre­ta­tor pentru un limbaj mai simplu. Ca o primă aventurare în lumea in­ter­pretării șirurilor de caractere ca in­strucți­u­ni pentru calculator, m-am decis să fac un simplu „cal­cu­la­tor” în Python, care să aibă și suport pentru câteva funcții matematice și pentru variabile.

Basically, ce urmăresc eu e să am un mic progrămel care știe să facă ur­mă­toarele:

7+10*sin(pi/2)/2-3^2  # să dea 3
x = 127-30*ln(e)      # x să aibă valoarea 97
y = x^2 - 60/30*(6+x) # y să aibă 9203

Definiția riguroasă a sintaxei pe care o acceptă programul este următoarea:

<Number> = [0-9]+.?[0-9]* <Identifier> 
continue.

Statistici si grafice în R

Să presupunem că avem un fișier text care conține notele unor elevi de la 3 examene. Fișierul are următoarea structură:


Grupa 1 2 2 Nota1 4 continue.

Scurtă introducere în R

R este un limbaj de programare făcut în primul rând pentru a face calcule statistice și pentru a vizualiza acestea. Are aproape 20 de ani (1993) și este cel mai folosit limbaj pentru data mining.[1. Rexer Analytics] Este desigur cross-platform, merge nativ și pe Windows, Linux, Mac OS X.

El vine gata integrat cu "IDE", deși acesta e cam nașpa (no au­to­com­plete, no keyboard text selection, etc.). Există și al­ter­na­tive cum ar fi RStudio sau RKWard. Pentru scopul acestui tutorial, îi cam totuna ce folosiți, limbajul contează.

Operații se pot introduce în linia de comandă și rezultatul este afișat imediat:

> 10 + 2*5
[1] 20
> sqrt(49) + log(10)
[1] 9.302585

Operatorul de atribuire este... <-. continue.

Statistici FP

Media notelor, fără cei absenți: 6.28.  Cu cei absenți: 5.96.

[gallery link="file" columns="4"]

Și aici se păstrează trendul grupei 211 de a avea note mai mari, neexistând note mai mici de 6. Îmi place lin­ear­i­tatea de la 0 la 5 a grupelor 215 și 216 :D

Grupa 211 Grupa 212 Grupa 213 Grupa 214 Grupa 215 Grupa 216 Grupa 217
Media 9.03 6.20 6.48 6.30 5.21 4.60 6.20
Număr picati 2 5 6 8 9 9 7
Procentaj picați 6% 16% 20% 28% 32% 32% 25%

Din cei prezenți la examen, au picat 34 de studenți. În total au picat 46 de studenți.

Trebuie să menționez că aici domnul profesor a pus 0 la studenții care nu s-au prezentat la examen. La AC și algebră eu am pus 1 la studenții care nu s-au prezentat, așa că poate asta un continue.

Statistici algebră

Media notelor doar la cei prezenți: 5,00. Cu cei absenți la examene: 4,02.

[gallery link="file" columns="4"]

In­ter­pretarea este aceeași: cu negru este frecvența notelor pe an, cu roșu este frecvența notelor pe grupă. Aici nu se mai observă nicio sim­i­lar­i­tate clară între rezultate pe grupe și pe an, dar se vede că totuși în grupa 211 au fost mult mai multe rezultate bune. Grupa 213 iar are un grafic.... ciudat, care „ține apa” :D

Grupa 211 Grupa 212 Grupa 213 Grupa 214 Grupa 215 Grupa 216 Grupa 217
Media 6.88 5.20 4.00 4.15 5.15 4.94 4.14
Număr picati 4 16 19 21 17 18 20
Procentaj picați 13% 53% 63% 75% 60% 64% 71%

Din cei prezenți la examen, au picat 66. Incluzând pe cei care nu s-au prezentat, au picat 115.

Este interesant că nu multor studenți le era așa continue.

Statistici AC

Pentru că e vacanță, pentru că mă cam plictiseam (there's so much Heroes VI you can play), pentru că eram curios să văd dis­tribuția notelor la examene, m-am pus să adun și să consolidez notele de care puteam face rost și să le prelucrez apoi. Cum Excel fiind prea grafic pentru mine, am decis să lucrez în R. Care e... GENIAL. Credeați că Python îi high-level? E ca și Vf. Omu pe lângă Everest. Operațiile pe vectori și matrici  îs operații elementare, făcutul de grafice e banaaaal, etc. Numa că operatorul de atribuire îi... un pic enervant: „\<-”. Care îi problema cu = ? Mai ales că la named parameters continue.

Prima sesiune...

...și-am doborât recordul de vizite pe bloooog, și-am doborât recordul de vizite pe bloooog, și-am doborât recordul de vizite pe bloooog, și-am doborât recordul de vizite pe bloooog \:D/. În două săptămâni jumate am avut peste 7000 de vizite.

Wait, postul ăsta îi despre sesiune. Păăăi, ce să zic. Sesiunea îi fuuuuun. :D În sesiune faci (mai mult sau mai puțin) un singur lucru: înveți. Nu tre' să mergi să pierzi vremea la cursuri, nu parcurgi material într-un ritm extrem de lent, punctat de exemple sau de anecdote personale ale pro­fe­soru­lui, nu tre' să te scoli devreme, etc.

Mie îmi convenea că, de exemplu, la algebră și BMC puteam să parcurg materia în continue.

Arrested Development

Cum ac­tiv­i­tatea principală a omului în sesiune  și în săptămâna dinainte este ~~uitatul la se­ri­ale~~ în­vățat­ul, din când în când el trebuie să se mai și relaxeze. Așa, între scrisul a două posturi pe blog. De departe cel mai tare serial pentru aceasta este Arrested De­vel­op­ment (pentru alții 18 episoade de Fringe. În 3 zile).

Arrested De­vel­op­ment este despre „a wealthy family who lost everything and the one son who had no choice but to keep them all together”. Serialul se învârte în jurul familiei Bluth, care este... complet dis­funcțion­ală. Per­son­ajele sunt cele mai țâcnite posibile, dar într-un mod fain. În general nu îmi plac per­son­ajele gen Dumb and Dumber, dar aici continue.