Compare commits
3 Commits
Author | SHA1 | Date | |
---|---|---|---|
9cf0f99109 | |||
47c104afec | |||
1ee37b4023 |
@ -1,3 +1,10 @@
|
||||
50/50 for ever door all the time!
|
||||
|
||||
[ total/ wins ]
|
||||
switched [98179, 65319] not switched [97686, 32587] total [195865, 97906]
|
||||
switched 66.53052078346693 % not switched 33.35892553692443 % all 49.98647027289204 %
|
||||
|
||||
|
||||
The Monty Hall Problem
|
||||
======================
|
||||
|
||||
|
BIN
exercises/1-monty-hall-problem/__pycache__/models.cpython-34.pyc
Normal file
BIN
exercises/1-monty-hall-problem/__pycache__/models.cpython-34.pyc
Normal file
Binary file not shown.
BIN
exercises/1-monty-hall-problem/__pycache__/views.cpython-34.pyc
Normal file
BIN
exercises/1-monty-hall-problem/__pycache__/views.cpython-34.pyc
Normal file
Binary file not shown.
@ -1,6 +1,52 @@
|
||||
#from models import
|
||||
from models import Doors
|
||||
from views import View
|
||||
|
||||
class Controller:
|
||||
def __init__(self):
|
||||
pass
|
||||
def __init__( self ):
|
||||
self.view = View()
|
||||
self.name = self.view.get_name()
|
||||
self.start()
|
||||
|
||||
def start( self ):
|
||||
|
||||
selected = int( self.view.display_doors() )
|
||||
self.doors = Doors( selected, self.name )
|
||||
|
||||
self.host_twist()
|
||||
|
||||
return True
|
||||
|
||||
def host_twist( self ):
|
||||
|
||||
message =""
|
||||
|
||||
for i in range( 1, 4 ):
|
||||
|
||||
if i == self.doors.selected:
|
||||
message += "[ X ] "
|
||||
elif i == self.doors.open_door:
|
||||
message += "[ Goat ] "
|
||||
else:
|
||||
message += "[ " + str(i) + " ] "
|
||||
other_selection = i
|
||||
|
||||
selection = self.view.host_twist( message )
|
||||
|
||||
if selection:
|
||||
self.doors.selected = other_selection
|
||||
self.doors.switch = True
|
||||
return self.out_come()
|
||||
|
||||
def out_come( self ):
|
||||
if self.doors.out_come():
|
||||
do = self.view.winner()
|
||||
else:
|
||||
do = self.view.loser()
|
||||
|
||||
if do == 'n':
|
||||
exit()
|
||||
|
||||
return self.start()
|
||||
return True
|
||||
|
||||
Controller()
|
||||
|
BIN
exercises/1-monty-hall-problem/default.db
Normal file
BIN
exercises/1-monty-hall-problem/default.db
Normal file
Binary file not shown.
4
exercises/1-monty-hall-problem/loop.sh
Normal file
4
exercises/1-monty-hall-problem/loop.sh
Normal file
@ -0,0 +1,4 @@
|
||||
for (( c=1; c<=100000; c++ ))
|
||||
do
|
||||
python3 controller.py
|
||||
done
|
@ -0,0 +1,38 @@
|
||||
import random
|
||||
|
||||
class Doors:
|
||||
def __init__( self, selected, name ):
|
||||
self.name = name
|
||||
self.switch = False
|
||||
self.selected = selected
|
||||
self.car = random.randint( 1,3 )
|
||||
self.open_door = self.host_twist()
|
||||
|
||||
def host_twist( self ):
|
||||
open_door = random.randint( 1,3 )
|
||||
if open_door == self.car or open_door == self.selected:
|
||||
return self.host_twist()
|
||||
return open_door
|
||||
|
||||
def out_come( self ):
|
||||
|
||||
if self.selected == self.car:
|
||||
logDB( self.name, self.switch, True)
|
||||
|
||||
return True
|
||||
else:
|
||||
logDB( self.name, self.switch, False)
|
||||
return False
|
||||
|
||||
def logDB( name, switch, outcome ):
|
||||
import sqlite3
|
||||
|
||||
conn = sqlite3.connect('default.db')
|
||||
c = conn.cursor()
|
||||
|
||||
c.execute( "INSERT INTO games (name, switch, outcome) values (?,?,?) ", ( name, switch, outcome ) )
|
||||
|
||||
conn.commit()
|
||||
|
||||
conn.close()
|
||||
return True
|
6
exercises/1-monty-hall-problem/schema.sql
Normal file
6
exercises/1-monty-hall-problem/schema.sql
Normal file
@ -0,0 +1,6 @@
|
||||
CREATE TABLE games (
|
||||
id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT DEFAULT NULL,
|
||||
switch TEXT DEFAULT NULL,
|
||||
outcome TEXT DEFAULT NULL
|
||||
);
|
28
exercises/1-monty-hall-problem/stats.py
Normal file
28
exercises/1-monty-hall-problem/stats.py
Normal file
@ -0,0 +1,28 @@
|
||||
import sqlite3
|
||||
|
||||
conn = sqlite3.connect('default.db')
|
||||
|
||||
c = conn.cursor()
|
||||
|
||||
switched = [ 0, 0 ]
|
||||
no_swich = [ 0, 0 ]
|
||||
total = [ 0, 0 ]
|
||||
c.execute( "SELECT * FROM games " )
|
||||
result = c.fetchall()
|
||||
for i in result:
|
||||
if int( i[ 2 ] ) == 1:
|
||||
# switched
|
||||
switched[0] += 1
|
||||
switched[1] += int( i[3] )
|
||||
else:
|
||||
# not switched
|
||||
no_swich[0] += 1
|
||||
no_swich[1] += int( i[3] )
|
||||
|
||||
total[0] += 1
|
||||
total[1] += int( i[3] )
|
||||
conn.commit()
|
||||
c.close()
|
||||
|
||||
print( "switched", switched, "not switched", no_swich, "total", total)
|
||||
print( 'switched', ( switched[1]/switched[0] )*100, "% not switched", ( no_swich[1]/no_swich[0] )*100, "% all", ( total[1]/total[0] )*100, "%" )
|
@ -1,3 +1,21 @@
|
||||
import random
|
||||
|
||||
|
||||
class View:
|
||||
def __init__(self):
|
||||
pass
|
||||
def __init__( self ):
|
||||
pass
|
||||
|
||||
def get_name( self ):
|
||||
return "computer"
|
||||
|
||||
def display_doors( self ):
|
||||
return random.randint( 1,3 )
|
||||
|
||||
def host_twist( self, message ):
|
||||
return bool(random.getrandbits(1))
|
||||
|
||||
def winner( self ):
|
||||
return ''
|
||||
|
||||
def loser( self ):
|
||||
return 'n'
|
BIN
exercises/2-bank-software/bank.db
Normal file
BIN
exercises/2-bank-software/bank.db
Normal file
Binary file not shown.
@ -1,2 +1,97 @@
|
||||
import bank_models
|
||||
import bank_views
|
||||
import bank_views
|
||||
|
||||
import sys
|
||||
from datetime import datetime
|
||||
import curses
|
||||
|
||||
class Bank:
|
||||
def __init__ ( self ):
|
||||
|
||||
# initialize the View class
|
||||
self.view = bank_views.View( screen, curses )
|
||||
self.db = bank_models.db()
|
||||
if 'dev' in sys.argv:
|
||||
self.view.showDev = True
|
||||
|
||||
self.view_loader( "welcome" )
|
||||
|
||||
def view_loader( self, view_name, passing=None ):
|
||||
re = getattr( self.view , view_name )( passing )
|
||||
|
||||
if type( re ) == dict:
|
||||
if '_return_to' in re:
|
||||
return getattr( self, re['_return_to'] )( re )
|
||||
|
||||
if '_next' in re:
|
||||
self.view_loader( re['_next'] )
|
||||
return re
|
||||
|
||||
def sign_up( self, obj ):
|
||||
|
||||
check = self.db.create_user( obj['name'], obj['password'], obj['permission'] )
|
||||
|
||||
# if user name is available
|
||||
if check:
|
||||
message = obj['name'] + " please login"
|
||||
self.view_loader( "login", message )
|
||||
else:
|
||||
message = "User name taken"
|
||||
self.view_loader( "sign_up", message )
|
||||
|
||||
def login( self, obj ):
|
||||
|
||||
self.user = bank_models.Users( obj['name'], obj['password'] )
|
||||
|
||||
if self.user.name:
|
||||
self.view.update_user( [ obj['name'] ] )
|
||||
getattr( self, self.permission + '_home' )()
|
||||
else:
|
||||
message = "Invalid login"
|
||||
self.login( self.view.login( message ) )
|
||||
|
||||
def logOut( self, message=False ):
|
||||
self.view.update_user( [ None ] )
|
||||
self.view_loader( "welcome" )
|
||||
|
||||
def client_home( self, start=0 ):
|
||||
self.user.list_accounts( start )
|
||||
self.view_loader( 'client_home', array )
|
||||
|
||||
def view_account( self, number=None, array={} ):
|
||||
self.account = model.Account( number )
|
||||
self.amount.user_id = self.user.id
|
||||
|
||||
if array != {}:
|
||||
array.update( self.account )
|
||||
else:
|
||||
array = self.account
|
||||
|
||||
self.view_loader( 'view_account', array )
|
||||
|
||||
def account_withdraw( self, amount ):
|
||||
check = self.account.withdraw( amount )
|
||||
|
||||
if check:
|
||||
self.view_loader( 'view_account', "Withdraw -" + amount )
|
||||
else:
|
||||
|
||||
self.view_account( None, { 'message': "Insufficient funds."} )
|
||||
|
||||
def account_deposit( self, amount ):
|
||||
self.account.deposit( amount )
|
||||
self.view_loader( 'view_account', "Deposit +" + amount )
|
||||
|
||||
def account_transfer( self, amount, to_number ):
|
||||
check = self.account.transfer( amount, to_number )
|
||||
|
||||
if check:
|
||||
self.view_loader( 'view_account', "Transfered -" + amount + " to " + to_number )
|
||||
else:
|
||||
|
||||
self.view_account( None, { 'message': "Insufficient funds."})
|
||||
try:
|
||||
curses.wrapper( Bank )
|
||||
except KeyboardInterrupt:
|
||||
print( "Got KeyboardInterrupt exception. Exiting..." )
|
||||
exit()
|
||||
|
@ -1 +1,119 @@
|
||||
import sqlite3
|
||||
import sqlite3
|
||||
import hashlib
|
||||
|
||||
class DB:
|
||||
def __init__( self, file= ):
|
||||
self.file = file
|
||||
|
||||
def create_user( self, name, pin, permission ):
|
||||
|
||||
c = self.__connect()
|
||||
|
||||
# check if user name is taken
|
||||
result = self.get_user( name )
|
||||
|
||||
if len(result) == 0:
|
||||
c.execute( "INSERT INTO user ( name, pin, permission ) VALUES ( ?, ?, ? )", ( name, pin, permission ) )
|
||||
self.conn.commit
|
||||
c.close()
|
||||
return True
|
||||
|
||||
else:
|
||||
c.close()
|
||||
return False
|
||||
|
||||
def login_user():
|
||||
c = self.__connect
|
||||
|
||||
c.execute( "SELECT * FROM user WHERE pin=(?) and name=(?)", ( pin ,name ) )
|
||||
result = c.fetchall()
|
||||
c.close()
|
||||
|
||||
if len( result ) == 1
|
||||
return result[0]
|
||||
|
||||
else:
|
||||
return False
|
||||
|
||||
def get_user( sefl, name ):
|
||||
c = self.__connect()
|
||||
|
||||
c.execute( "SELECT * FROM user WHERE name LIKE (?)", ( name ) )
|
||||
c.close()
|
||||
|
||||
return c.fetchall()
|
||||
|
||||
def __connect( self ):
|
||||
self.conn = sqlite3.connect( '' )
|
||||
return self.conn.cursor()
|
||||
|
||||
# start the data base
|
||||
|
||||
class Users:
|
||||
def __int__( self, name, pin ):
|
||||
|
||||
def creat( self, name, pin, permission ):
|
||||
pin = hashlib.md5( pin )
|
||||
if db.create_user( name, pin.hexdigest(), permission ):
|
||||
return True
|
||||
return False
|
||||
|
||||
def login( self, name, pin ):
|
||||
pin = hashlib.md5( pin )
|
||||
get_user = db.login_user( name, pin.hexdigest() )
|
||||
|
||||
if get_user:
|
||||
return __check_type( get_user )
|
||||
return False
|
||||
|
||||
def __check_type( self, user ):
|
||||
|
||||
if user.permission == "client":
|
||||
return Cleint( user )
|
||||
elif user.permission == "banker"
|
||||
return Banker( user )
|
||||
|
||||
def look_up( self, name ):
|
||||
|
||||
return db.get_user( name )
|
||||
|
||||
class account:
|
||||
def __init__( self, account_number ):
|
||||
self.account = db.account( amount )
|
||||
|
||||
def view( self ):
|
||||
return self.account
|
||||
|
||||
def withdraw( self, amount ):
|
||||
if amount < self.amount.balance:
|
||||
db.account_update( self.account.number, amount, withdraw )
|
||||
|
||||
def deposit( self, amount ):
|
||||
db.account_update( self.account.number, amount, deposit )
|
||||
|
||||
|
||||
def transfer( self, amount, to_account_number ):
|
||||
db.account_update( self.account.number, amount, transfer )
|
||||
db.account_update( to_account_number, amount, transfer )
|
||||
|
||||
class client:
|
||||
def __init__( self ):
|
||||
self.accounts = account()
|
||||
|
||||
def view_all_accounts( self ):
|
||||
return self.accounts
|
||||
|
||||
class banker( user ):
|
||||
|
||||
def __init__( self ):
|
||||
pass
|
||||
|
||||
def view_all_users( self ):
|
||||
pass
|
||||
|
||||
def view_user_acconts( self ):
|
||||
pass
|
||||
|
||||
def current_account( self ):
|
||||
pass
|
||||
|
@ -0,0 +1,306 @@
|
||||
import time
|
||||
import random
|
||||
|
||||
class View:
|
||||
def __init__( self, screen, curses ):
|
||||
|
||||
# set instance variable
|
||||
self.showDev = False
|
||||
self.userName = None
|
||||
|
||||
self.curses = curses
|
||||
# start the curses instance
|
||||
self.screen = screen
|
||||
|
||||
# configure the whole screen
|
||||
|
||||
# set border for main screen
|
||||
self.screen.border(0)
|
||||
# hide KB input
|
||||
self.curses.noecho()
|
||||
|
||||
self.curses.curs_set(0)
|
||||
|
||||
# idk, i have to look it up
|
||||
self.screen.keypad(1)
|
||||
|
||||
# draw the main screen
|
||||
self.screen.refresh()
|
||||
|
||||
# setup the header window
|
||||
self.header = self.curses.newwin( 4, 35, 2, 3 )
|
||||
self.header.border(0)
|
||||
|
||||
# setup the right header window
|
||||
self.header_right = self.curses.newwin( 4, 35, 2, 38 )
|
||||
self.header_right.border(0)
|
||||
self.header_right.refresh()
|
||||
|
||||
# setup the body window
|
||||
self.body = self.curses.newwin( 15, 50, 6 , 3)
|
||||
# self.body.border(0)
|
||||
|
||||
# side bar
|
||||
self.side_bar = self.curses.newwin( 15, 20, 6 , 53)
|
||||
self.side_bar.border(0)
|
||||
|
||||
# dev console
|
||||
self.dev = self.curses.newwin( 50, 70, 17 , 3)
|
||||
self.dev.border(0)
|
||||
|
||||
#############################################
|
||||
|
||||
self.header_right.addstr( 1, 20, "Not logged in")
|
||||
self.header_right.refresh()
|
||||
|
||||
def menu( self, sidebar=True ):
|
||||
#listen for keyboard input
|
||||
|
||||
# hide KB input
|
||||
self.curses.noecho()
|
||||
|
||||
if sidebar:
|
||||
array = []
|
||||
|
||||
# check if there is a logged in user
|
||||
if self.userName:
|
||||
array.extend( [ "l log out", "p play" ] )
|
||||
else:
|
||||
array.extend( [ "l login", "n new user" ] )
|
||||
|
||||
#append things that are all ways in menu
|
||||
array.extend( [ "", "c cedits", "Q Quit" ] )
|
||||
|
||||
# trigger side bar update
|
||||
self.update_side_bar( array )
|
||||
|
||||
# loop to listen for user input
|
||||
while True:
|
||||
|
||||
event = self.screen.getch()
|
||||
|
||||
# check if user is logged in
|
||||
if self.userName:
|
||||
if event == ord( "p" ) or event == ord( "P" ):
|
||||
return { '_return_to': 'new_round' }
|
||||
|
||||
if event == ord( "h" ) or event == ord( "H" ):
|
||||
return { '_return_to': 'home' }
|
||||
|
||||
if event == ord( "l" ) or event == ord( "L" ):
|
||||
return { '_return_to': 'logOut' }
|
||||
else:
|
||||
if event == ord( "n" ) or event == ord( "N" ):
|
||||
return { '_next': 'sign_up' }
|
||||
|
||||
if event == ord( "l" ) or event == ord( "L" ):
|
||||
return { '_next': 'login' }
|
||||
|
||||
# all ways
|
||||
if event == ord( "c" ) or event == ord( "C" ):
|
||||
return { '_next': 'about' }
|
||||
|
||||
if event == ord( "q" ) or event == ord( "Q" ):
|
||||
# needs work...
|
||||
self.curses.endwin()
|
||||
exit()
|
||||
else:
|
||||
self.side_bar.addstr( 12, 2, "invalid choice." )
|
||||
# draw the body
|
||||
self.curses.flash()
|
||||
self.side_bar.refresh()
|
||||
|
||||
def welcome( self, message=False ):
|
||||
|
||||
# write the header up
|
||||
self.header.addstr( 1, 2, "Welcome to the RPN game!" )
|
||||
#draw the header
|
||||
self.header.addstr( 2, 2, "Go bears!" )
|
||||
if self.showDev:
|
||||
self.header.addstr( 2, 12, "-dev" )
|
||||
|
||||
self.header.refresh()
|
||||
|
||||
# short pause
|
||||
time.sleep(.5)
|
||||
|
||||
self.body.clear()
|
||||
self.body.refresh()
|
||||
|
||||
# write the body
|
||||
self.body.addstr( 1, 3, "bank!" )
|
||||
|
||||
# show error message
|
||||
if message:
|
||||
self.body.addstr( 34, 2, message )
|
||||
|
||||
# draw the body
|
||||
self.body.refresh()
|
||||
|
||||
#listen for keyboard input
|
||||
return self.menu()
|
||||
|
||||
def client_home( self, array=False ):
|
||||
self.body.clear()
|
||||
|
||||
# allow user to see KB input
|
||||
self.curses.echo()
|
||||
|
||||
# remove old content
|
||||
self.side_bar.clear()
|
||||
self.side_bar.refresh()
|
||||
|
||||
# write to body
|
||||
left = 1
|
||||
count = 1
|
||||
for i in array:
|
||||
self.side_bar.addstr( count, left, str(i) )
|
||||
count += 1
|
||||
|
||||
# draw body
|
||||
self.body.refresh()
|
||||
|
||||
def sign_up( self, message=False ):
|
||||
|
||||
# remove old body content
|
||||
self.body.clear()
|
||||
|
||||
# allow user to see KB input
|
||||
self.curses.echo()
|
||||
|
||||
# remove old content
|
||||
self.side_bar.clear()
|
||||
self.side_bar.refresh()
|
||||
|
||||
# write to body
|
||||
self.body.addstr( 2, 2, "Pick a new user name and pin:" )
|
||||
# draw body
|
||||
self.body.refresh()
|
||||
|
||||
# show error message
|
||||
if message:
|
||||
self.body.addstr( 8, 2, message )
|
||||
self.body.refresh()
|
||||
|
||||
# ask for user name
|
||||
self.body.addstr( 3, 2, "user Name:" )
|
||||
name = self.body.getstr(4, 2, 60)
|
||||
|
||||
self.body.addstr( 5, 2, "permission:[ admin / banker / client ]" )
|
||||
permission = self.body.getstr(4, 2, 60)
|
||||
|
||||
self.body.addstr( 7, 2, "Pin:" )
|
||||
#self.body.refresh()
|
||||
password = self.body.getstr( 8, 2, 60 )
|
||||
|
||||
return( { 'name':name, 'password':password, 'permission': permission '_return_to': 'sign_up' } )
|
||||
|
||||
def login( self, message=False ):
|
||||
|
||||
# remove old body content
|
||||
self.body.clear()
|
||||
|
||||
# remove old content
|
||||
self.side_bar.clear()
|
||||
self.side_bar.refresh()
|
||||
|
||||
# allow user to see KB input
|
||||
self.curses.echo()
|
||||
|
||||
if message:
|
||||
self.curses.flash()
|
||||
self.body.addstr( 7, 2, message )
|
||||
self.body.refresh()
|
||||
|
||||
self.body.addstr( 2, 2, "Please log in with your user name and pin:" )
|
||||
|
||||
self.body.addstr( 3, 2, "user Name:" )
|
||||
name = self.body.getstr( 4, 2, 60 )
|
||||
self.body.addstr( 5, 2, "Pin:" )
|
||||
|
||||
self.body.refresh()
|
||||
password = self.body.getstr( 6, 2, 60 )
|
||||
|
||||
# if error message
|
||||
|
||||
return( { 'name':name, 'password':password, '_return_to': 'login' } )
|
||||
|
||||
def update_side_bar( self, array ):
|
||||
|
||||
# remove old content
|
||||
self.side_bar.clear()
|
||||
self.side_bar.border(0)
|
||||
left = 3
|
||||
count = 1
|
||||
for i in array:
|
||||
self.side_bar.addstr( count, left, str(i) )
|
||||
count += 1
|
||||
# draw new content
|
||||
self.side_bar.refresh()
|
||||
|
||||
def update_user( self, array ):
|
||||
self.userName = array[0]
|
||||
if not self.userName:
|
||||
display = "Please log in"
|
||||
else:
|
||||
display = array[0]
|
||||
# remove old content
|
||||
self.header_right.clear()
|
||||
self.header_right.border(0)
|
||||
|
||||
left = 33 - len( display )
|
||||
|
||||
self.header_right.addstr( 1, left, display )
|
||||
# draw new content
|
||||
self.header_right.refresh()
|
||||
|
||||
def about( self, message=False ):
|
||||
# remove old body content
|
||||
self.body.clear()
|
||||
self.body.border(0)
|
||||
|
||||
self.side_bar.clear()
|
||||
self.side_bar.refresh()
|
||||
|
||||
array = [
|
||||
{
|
||||
'name': "William Mantly",
|
||||
'email': "wmantly@gmail.com",
|
||||
'desc': "Designed and implemented the UI."
|
||||
}
|
||||
]
|
||||
|
||||
random.shuffle(array)
|
||||
|
||||
line = 2
|
||||
for i in array:
|
||||
self.body.addstr( line, 2, i['name'] + ' - ' + i['email'] )
|
||||
if 'desc' in i:
|
||||
line += 1
|
||||
self.body.addstr( line, 2, i['desc'] )
|
||||
if 'desc2' in i:
|
||||
line += 1
|
||||
self.body.addstr( line, 2, i['desc2'] )
|
||||
line += 2
|
||||
self.body.refresh()
|
||||
time.sleep(1)
|
||||
|
||||
return self.menu()
|
||||
|
||||
def devConsole( self, message, sleep=2 ):
|
||||
# side bar
|
||||
if not self.showDev: return False
|
||||
|
||||
self.dev.clear()
|
||||
self.dev.border(0)
|
||||
|
||||
count = 0
|
||||
for i in message:
|
||||
count += 1
|
||||
self.dev.addstr( count, 2, i )
|
||||
print( i )
|
||||
|
||||
self.dev.refresh()
|
||||
time.sleep( sleep )
|
||||
|
||||
##testing
|
@ -1 +1,41 @@
|
||||
import sqlite3
|
||||
import sqlite3
|
||||
|
||||
def create_db():
|
||||
conn = sqlite3.connect('bank.db')
|
||||
c = conn.cursor()
|
||||
c.execute("DROP TABLE IF EXISTS 'user'")
|
||||
c.execute("DROP TABLE IF EXISTS 'accounts'")
|
||||
c.execute("DROP TABLE IF EXISTS 'transactions'")
|
||||
c.execute("""
|
||||
CREATE TABLE users (
|
||||
id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT DEFAULT NULL,
|
||||
created TEXT DEFAULT NULL,
|
||||
permission TEXT DEFAULT NULL
|
||||
);
|
||||
""")
|
||||
c.execute("""
|
||||
CREATE TABLE accounts (
|
||||
id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER DEFAULT NULL REFERENCES users (id),
|
||||
balance TEXT DEFAULT NULL,
|
||||
name TEXT DEFAULT NULL,
|
||||
opened TEXT DEFAULT NULL
|
||||
);
|
||||
""")
|
||||
c.execute("""
|
||||
CREATE TABLE transactions (
|
||||
id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
outgoing_id INTEGER DEFAULT NULL REFERENCES accounts (id),
|
||||
incoming_id INTEGER DEFAULT NULL REFERENCES accounts (id),
|
||||
type TEXT DEFAULT NULL,
|
||||
amount TEXT DEFAULT NULL,
|
||||
date TEXT DEFAULT NULL,
|
||||
new field TEXT DEFAULT NULL
|
||||
);
|
||||
""")
|
||||
|
||||
conn.commit()
|
||||
c.close()
|
||||
|
||||
create_db()
|
||||
|
22
exercises/2-bank-software/test.txt
Normal file
22
exercises/2-bank-software/test.txt
Normal file
@ -0,0 +1,22 @@
|
||||
CREATE TABLE users (
|
||||
id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT DEFAULT NULL,
|
||||
created TEXT DEFAULT NULL,
|
||||
permission TEXT DEFAULT NULL
|
||||
);
|
||||
CREATE TABLE accounts (
|
||||
id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
user_id INTEGER DEFAULT NULL REFERENCES users (id),
|
||||
balance TEXT DEFAULT NULL,
|
||||
name TEXT DEFAULT NULL,
|
||||
opened TEXT DEFAULT NULL
|
||||
);
|
||||
CREATE TABLE transactions (
|
||||
id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT,
|
||||
outgoing_id INTEGER DEFAULT NULL REFERENCES accounts (id),
|
||||
incoming_id INTEGER DEFAULT NULL REFERENCES accounts (id),
|
||||
type TEXT DEFAULT NULL,
|
||||
amount TEXT DEFAULT NULL,
|
||||
date TEXT DEFAULT NULL,
|
||||
new field TEXT DEFAULT NULL
|
||||
);
|
Loading…
x
Reference in New Issue
Block a user