2 Commits

Author SHA1 Message Date
037ce198e3 stuff 2016-02-23 19:19:52 -05:00
26469c9ae3 example 2016-02-23 17:46:32 -05:00
16 changed files with 84 additions and 673 deletions

View File

@ -1,10 +1,5 @@
50/50 for ever door all the time! 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 The Monty Hall Problem
====================== ======================

View File

@ -9,8 +9,11 @@ class Controller:
def start(self): def start(self):
selected = int( self.view.display_doors() ) selected = False
self.doors = Doors( selected, self.name ) while selected not in ['1', '2', '3']:
selected = self.view.display_doors()
self.doors = Doors(int(selected), self.name)
self.host_twist() self.host_twist()
@ -23,30 +26,32 @@ class Controller:
for i in range(1, 4): for i in range(1, 4):
if i == self.doors.selected: if i == self.doors.selected:
message += "[ X ] " message += '[ X ] '
elif i == self.doors.open_door: elif i == self.doors.open_door:
message += "[ Goat ] " message += '[ Goat ] '
else: else:
message += "[ " + str(i) + " ] " message += '[ ' + str(i) + ' ] '
other_selection = i other_selection = i
selection = False
while selection not in ['n', 'y', '']:
selection = self.view.host_twist(message).lower()
selection = self.view.host_twist( message ) if selection == 'y':
if selection:
self.doors.selected = other_selection self.doors.selected = other_selection
self.doors.switch = True self.doors.switch = True
return self.out_come() return self.out_come()
def out_come(self): def out_come(self):
message = 'LOSE'
if self.doors.out_come(): if self.doors.out_come():
do = self.view.winner() message = 'WIN'
else:
do = self.view.loser()
if do == 'n': replay = self.view.out_come(message)
exit()
if replay in ['', 'y']:
return self.start() return self.start()
return True
return exit()
print('name:', __name__)
if __name__ == '__main__':
Controller() Controller()

View File

@ -1,4 +0,0 @@
for (( c=1; c<=100000; c++ ))
do
python3 controller.py
done

View File

@ -1,5 +1,9 @@
import sqlite3
import random import random
conn = sqlite3.connect('default.db')
c = conn.cursor()
class Doors: class Doors:
def __init__(self, selected, name): def __init__(self, selected, name):
self.name = name self.name = name
@ -18,21 +22,37 @@ class Doors:
if self.selected == self.car: if self.selected == self.car:
logDB(self.name, self.switch, True) logDB(self.name, self.switch, True)
return True return True
else: else:
logDB(self.name, self.switch, False) logDB(self.name, self.switch, False)
return False return False
def logDB(name, switch, outcome): 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)) c.execute("INSERT INTO games (name, switch, outcome) values (?,?,?) ", (name, switch, outcome))
conn.commit() conn.commit()
conn.close()
return True return True
def seedDB():
c.execute("""
CREATE TABLE games (
id INTEGER DEFAULT NULL PRIMARY KEY AUTOINCREMENT,
name TEXT DEFAULT NULL,
switch TEXT DEFAULT NULL,
outcome TEXT DEFAULT NULL
);
""")
conn.commit()
conn.close()
if __name__ == '__main__':
seed = input('Seed the database[y/n]: ').lower()
if seed in ['y', 'yes']:
print('seeding')
seedDB()
exit()

View File

@ -1,28 +0,0 @@
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, "%" )

View File

@ -1,21 +1,25 @@
import random
class View: class View:
def __init__( self ):
pass
def get_name(self): def get_name(self):
return "computer" print('\033c')
print('Welcome to the Monty Hall Problem!')
return input('Please enter your name: ')
def display_doors(self): def display_doors(self):
return random.randint( 1,3 ) print('\033c')
print('Doors: [ 1 ] [ 2 ] [ 3 ]')
return input('Select door: ')
def host_twist(self, message): def host_twist(self, message):
return bool(random.getrandbits(1)) print('The host will revel where one goat is...')
print(message)
print('Would you like to change your selection? [n/y]')
return input('[n]: ')
def winner( self ): def out_come(self, message):
return '' print('You {}!!!'.format(message))
return input('Play again?[y]')
if __name__ == '__main__':
print('Please opne controller.py')
exit()
def loser( self ):
return 'n'

Binary file not shown.

View File

@ -1,97 +1,2 @@
import bank_models 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()

View File

@ -1,119 +1 @@
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

View File

@ -1,306 +0,0 @@
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

View File

@ -1,41 +1 @@
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()

View File

@ -1,22 +0,0 @@
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
);