From 9e7126ad9ba54b3a774fac5158f05077566dd034 Mon Sep 17 00:00:00 2001 From: william Date: Tue, 1 Mar 2016 17:54:50 -0500 Subject: [PATCH] stuff --- examples/create-a-db-from-csv/README.md | 49 ++ .../__pycache__/sql.cpython-34.pyc | Bin 0 -> 1742 bytes examples/create-a-db-from-csv/employees.csv | 501 ++++++++++++++++++ examples/create-a-db-from-csv/employess.db | Bin 0 -> 33792 bytes examples/create-a-db-from-csv/sql.py | 51 ++ examples/monty-hall-problem/README.md | 56 ++ .../__pycache__/controller.cpython-34.pyc | Bin 0 -> 1761 bytes .../__pycache__/models.cpython-34.pyc | Bin 0 -> 1727 bytes .../__pycache__/views.cpython-34.pyc | Bin 0 -> 1291 bytes examples/monty-hall-problem/controller.py | 57 ++ examples/monty-hall-problem/default.db | Bin 0 -> 2048 bytes examples/monty-hall-problem/models.py | 42 ++ examples/monty-hall-problem/schema.sql | 6 + examples/monty-hall-problem/views.py | 25 + 14 files changed, 787 insertions(+) create mode 100644 examples/create-a-db-from-csv/README.md create mode 100644 examples/create-a-db-from-csv/__pycache__/sql.cpython-34.pyc create mode 100644 examples/create-a-db-from-csv/employees.csv create mode 100644 examples/create-a-db-from-csv/employess.db create mode 100644 examples/create-a-db-from-csv/sql.py create mode 100644 examples/monty-hall-problem/README.md create mode 100644 examples/monty-hall-problem/__pycache__/controller.cpython-34.pyc create mode 100644 examples/monty-hall-problem/__pycache__/models.cpython-34.pyc create mode 100644 examples/monty-hall-problem/__pycache__/views.cpython-34.pyc create mode 100644 examples/monty-hall-problem/controller.py create mode 100644 examples/monty-hall-problem/default.db create mode 100644 examples/monty-hall-problem/models.py create mode 100644 examples/monty-hall-problem/schema.sql create mode 100644 examples/monty-hall-problem/views.py diff --git a/examples/create-a-db-from-csv/README.md b/examples/create-a-db-from-csv/README.md new file mode 100644 index 0000000..60d5eae --- /dev/null +++ b/examples/create-a-db-from-csv/README.md @@ -0,0 +1,49 @@ +## Create a DB from CSV data + +In this challenge, you will be asked to import CSV data into a sqlite database. + +In the CSV file, you will find a person with a name, email, country of residence, and three phone numbers. + +Create a users table and a phone numbers table. The relation is that a user has many phone numbers. Create the schema in SQL designer and push it to this folder on Github. + +When you have done that, use Python's sqlite3 library to create the tables. + +#### SQLite 3 + +Take a look here at Python's sqlite driver [documentation](https://docs.python.org/3.4/library/sqlite3.html) + +You need to establish a database and a cursor object. +```py +import sqlite3 +conn = sqlite3.connect('mydb.db') +c = conn.cursor() +``` +To create a table: +```py +c.execute("CREATE TABLE 'users' ( +'id' INTEGER, +'name' VARCHAR, +'account' VARCHAR, +'balance' REAL, +PRIMARY KEY ('id') +)") +``` +To insert a row of data: +```py +c.execute("INSERT INTO users(name, account, balance) VALUES(?,?,?)", (name, account, balance)) +``` +**Note: ** You must specify the columns names otherwise sqlite3 will default to all columns. + +Sandbox! dir() and help() the cursor for all the methods possible. + +What does executemany do? + +What are your options for fetch? + +#### CSV + +Take a look at the CSV library for Python's [documentation](https://docs.python.org/3.4/library/csv.html) + +Sandbox some more with CSV. + +Import the file using Python's csv library and figure out how to write this data into the appropriate table and column in the db. diff --git a/examples/create-a-db-from-csv/__pycache__/sql.cpython-34.pyc b/examples/create-a-db-from-csv/__pycache__/sql.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7bd1ee4327933aaccf42286e38cbc7421192a75f GIT binary patch literal 1742 zcmbVM&2HO95S}F|ilnHd31Xu`@&YU>t8D;ZS_B51#)lwA3k6AGpdcu5Y*XQ%cd0ru zq>}=)w?0Q-qQ@S4>|w7x<P0SwM>M;={PZTs!ir9pEL@~AuIcpi0f;E|O3Y4G4(NR*P$kE={tslJR zL#%ylf9Qi8khM`{UG&%A?mWjPIgC2mi{mmWFphN)$3>OSa^}N0KAR=^<%yM!wU;JM zGENl!0@5cJhP;0^Jgo{Go@aTUCB<+&Z*bUPo}*NQFFyNxcc{+tA-+L5$rP&LqrpUC z(%>K&q~pP{tct-z{lH2)^;|m~Q%JUzMI;omM~}nElMegqFmZ`!fB!U*PczI@?Qn#; zgGG|%x;v?6Wh3Y2yMKagxqv@sAi8ubk4PwdzAPiXR!jD`$7%;eZs0}T)FQJIf_jRY zW7W1!%XkFbM(;6jK2YC{B3FmsoK_{q<*XQ^)S<+jN|BoKYwxmo{tu{kHtnu~y-_sD zX-iJ~Ukk&PzDM`<$_F=$=-W>#iP=f{4Cki)rgYkwDU_0d(@rz5QM+x5|Bb^(qp zKKcGvSX!{4^{}B%FcCUS8yXjyE-VBrjD$Uq(1R%f=dh6IeS(m=4sovGT)4jid+9(E zz_bUM4GZdwF6`1Wp&hcz+8${Ku)A^AyE^NAa28&jh3(l1#UntReF?8#(Z2ZhJ0hc~ ze|XVfH;dY#@p&&keP@QFPoO5;q2WdBHsv?_cC(R~}wlA`}?E$wPY{`)6URF{^G;xuX zb6PRZah9X*o|0MG3)(TZ-D4hLWun|@Ngh+}*NIdZ?~h(SpjY*f2#C;nVD&{`d@Q!8 zT>`rLwksaeB_sZb7FkwiO&q^Ci~{Y}i06p<*6564$0wJ|t4)FyMOh-n-+5l8n41ht vtT?t~J5KE6X7}#4+au{% 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 z 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 CM0cG4 literal 0 HcmV?d00001 diff --git a/examples/create-a-db-from-csv/sql.py b/examples/create-a-db-from-csv/sql.py new file mode 100644 index 0000000..3d764ec --- /dev/null +++ b/examples/create-a-db-from-csv/sql.py @@ -0,0 +1,51 @@ +from peewee import * + +db = SqliteDatabase('employess.db') +db.connect() + +# set up DB models +class Employee(Model): + name = CharField() + email = CharField() + country = CharField() + + class Meta: + database = db + +class Phone_number(Model): + user = ForeignKeyField(Employee, related_name='employee') + type = CharField() + number = CharField() + + class Meta: + database = db + + + + +# parse CSV file +def parse_CSV(): + file = open('employees.csv') + + headers = file.readline().strip().split(',') + + with db.atomic(): + for line in file: + fields = line.strip().split(',', 5) + fields = dict(zip(headers, fields)) + employee = Employee.create( + name=fields['name'], + email=fields['email'], + country=fields['country'] + ) + + Phone_number.insert_many([ + {'employee': employee, 'type': 'cellphone', 'number': fields['cellphone']}, + {'employee': employee, 'type': 'homephone', 'number': fields['homephone']}, + {'employee': employee, 'type': 'workphone', 'number': fields['workphone']}, + ]) + +if __name__ == '__main__': + # create tables if they dont exist + db.create_tables([Employee, Phone_number], True) + parse_CSV() diff --git a/examples/monty-hall-problem/README.md b/examples/monty-hall-problem/README.md new file mode 100644 index 0000000..e4105c8 --- /dev/null +++ b/examples/monty-hall-problem/README.md @@ -0,0 +1,56 @@ +50/50 for ever door all the time! + +The Monty Hall Problem +====================== + +Loosely based on the 1960s game show "Let's Make a Deal", the Monty Hall problem is a paradox in probability. + +A player is presented with three doors from which to choose. Behind one of the doors is a brand new car. Behind the other two are goats. The winning door is completely random. + +Obviously the player wants to win the new car, and must pick a door to open, hoping to reveal it. + +Before it is revealed however, the host will open one of the doors for the player to reveal one of the goats. The player can choose to stick with their original choice, or change their choice and pick the one other possible door. + +First Iteration +--------------- + +Using the Model-View-Controller pattern, let's first build out a terminal application for users to play the game. + +###The View + +Let's keep all messages and user prompts inside the views file. If you would like to create a class to hold the views, or just use the file as a module is up to you. + +Just don't hold any state in the views. Every variable, likely just user choices, should be passed back to the controller. + +###The Models + +We'll be using the models for two things: + +1. To handle any "business logic" the program needs. An example would be generating what's behind each door. + +2. To commit to the database. Let's save user names, whether they chose to switch their choice or not when prompted, and whether they won the car. + +A model in general should not communicate with other models, and should definitely not communicate directly with views. All communication should be handled through the controller. + +###The Controller + +No spaghetti code! All user choices should be passed from the views back to the controller. Any business logic should be passed from the models to the controller. Any data that needs persistence should be sent from the controller to the model that writes to the db. + +Before you move on, make sure you can play your game without error, that it tells you whether you won or not, and that it commits the correct data to the db. + +Second Iteration +---------------- + +Now for the fun part. + +Copy your code into a different folder because we're going to hack it up. You shouldn't even need your views anymore. + +Change your code so that it runs automated - the computer is the one choosing the door, and choosing whether or not to change their choice after the host's reveal. This should all be at random to ensure an equitable range of choices. + +You should write the same data to the db as previously. + +Run your program 100,000 times. + +Write another program to query the database and return to you the percentage of times the choice was changed after the reveal and the car was won, and the percentage of times the choice was not changed after the reveal and the car was won. + +Write your findings in this file. Read through the [wikipedia](http://en.wikipedia.org/wiki/Monty_Hall_problem) diff --git a/examples/monty-hall-problem/__pycache__/controller.cpython-34.pyc b/examples/monty-hall-problem/__pycache__/controller.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8565f3225534b65c85962dda94291143ce612ca6 GIT binary patch literal 1761 zcmZ8h&u<$=6n-=N!#`@1kcb4SRht{EL~7DXAOS*^Qd%KV12RfrqiW^YL$c}Go6Jmb zY$d0{AA`i7!jaP)xNypa8y8M|Z#H&KRy%Ls&ad~q?|n0Wx7yA9e}3QlAtd^XmYx9q z6Eu^;4Dkvoh(>}^L4yA!6_Q2)r2&cO!+?e%{fzFAUQ0?tQV|U!QZfGue1ge7=}bktcltBo0K2U=PYvPyhAjf`?qkw>y@C32XqO7QMelE_k7Bp2hf7ivj**3 zNfulPdR=kki_errem07a_$Wp%sdb+@vE#%eCmw&71iFPNy3OV-n53o|aM~W`=CtTf zvmt9iGcFh8s1;}8BH!zp$EC5Eo#e(QQrCH;4p!B`s-fq#GEEHV8Voyzpmk9C2S+K!KxOq1Igmc4&VM#!45E?Z7^yML4NxH;47YFP6Q%_k)A2UN6OT&Se zf9i*$#jvN>hCB}xZbGY@yb`}x0k7YObgx3Xc%Lqz>Xxs>Z$4r~C-DvQCpG37)6RaO zeV*6!vHqaTN~eM{puTehG^-QN9)oW1vR=~eI=W{0U$X{g@xj*jTQ9d}jf1V{W#6(Z z54L6j9F%bE#FXo|fvI|v%{mOuRHXakBc)flYYirCl&5O!3+V!5wJ)%K8zU|%%8Alx zY$mxK9J_jXZnFUn0*;WcW^JU5=^rU4@^q!N$4X~aee-ghHWu#fTJzov%iM=St>uPX z6K#mUE#DPQ!L`39TR09YV)o8b_20;8A%OrJaN9*QFJLMOFlqA>pzpI5P^%j3s;Ion9jrz#Wf!W8 z+=71QN#BD>W3Bka+$Mw9@hxWfc#%)OA=i*Tq`!O@%(?F-HNHIfvdS{o%(78AJTKU9 zW!c$zzoZ}kaB8};*XmLYT+Bb+L# t6Q4$Wg&KdI`V}rZ)qDv&_iNg%#;8pbKLURsiCx@SyPFN80EE`mk~#3E->SB3*I^)e+Fzr(PmTQ4jW1K0QaEi!rK7kPk<2=5w8k%(*+FRjj-by0DIOg zX%yHn?p;y55DOzdA1pfszRqTqJ}xeDp58W>loRUeISC|xf*~dj!(jKG4V;u5rNT_UC0)mD!|!vC!DpSXC(1(HD;% zKk1*pI_=|olzFL8^&cNinp!W8Mp;!IO=WXY;iOMau~Ns=h4DD3h>R!ztNtJiaZnwL5snXsAZoWiqac0sSTHe2I@gwz!y zibR`#j-9=gSB~a{w|zf6+8j}KNq#zy#jy9Th!%`FH_91GzoDO`@V6dWW$&<;?*1d5l461H$-;)Ba@R^WyT~moF)_G5;KjveH$dkotO2$keC*cK4sQ_Mn{!L0-XKpT5J~ws9MfQum35jf9}W?VLp{R7?R)XvqF;ai?9hmX zaTlnPP|=REenTKWp|eY#jPE4D6mgDdtC#eK@2XPci_McGIn_y+H+4-UPW*FzG3+(9 z?ky7Im-Td}jbAl$lnL>c$nH-iQ9S9c6PVHiR-rN;zAyFv0W__z)-T|5rmAA1bVTGt RqT@X19NdeD7o>{==O0g&QK0|; literal 0 HcmV?d00001 diff --git a/examples/monty-hall-problem/__pycache__/views.cpython-34.pyc b/examples/monty-hall-problem/__pycache__/views.cpython-34.pyc new file mode 100644 index 0000000000000000000000000000000000000000..874b8d8c7903aeff7f25a056e7c507af859b8df9 GIT binary patch literal 1291 zcmbtTUu)Dr5Z~nf_PA4M5i0&+>r?a4i)}%nh%Ho5kRFAT7F&)Glj&XTCVTGg^?FgC z>X-3L_zC<3dG%d<_Q{z|t8LLI6LvCWcV~XT`OSQ9cUpIUeBJxvGWLyKdMfB|;nI)M zJdYWR9rnrEGnXAO1`dl|cI+~>&cJ1Hg`GLf0sJuLWO%U3`d%%<%fBB?QHIl3!(Ujm35Aqtjq<)B1H5&tdFVQQb>m8ae0j=}Q^5aq0VLOo^@`1~XZteXrWf-8)hKU>`&zQ{YB&GXlONGc)5aLLvCBl5Yg0OZnoifKUU6%z)xE zIZ-?dQ`q31ThzuX$xKm8vhl=tPEpk$jy^M0Lj*rx`XdbOPZJ@MF!kTe4EP3w0Hs&f z9Y2ll9s1DtW z-Ty7f;xj3g-r$FPl@HLaS-Z{$d8ZEoBEw@mK-?7pQPe1&qpIW+>CzCqq7x^2EW%kp zH*^DkU4}hxVP82CQAB#^OUsJ6jLsD?KRBhB|B!Y073w&W+Hfj7S8xJ?Pe-7D%MAEX zhK47)+wJDveK`>^Dau81Yi%}X(_+4izVmbFif(|!`Z;ASe=UckyL4DO1(It>X_#Y>vxj4lhLNeM zCR`;@wzxdABsoJ#A=uZ^#|LN