diff options
Diffstat (limited to 'sample_notebooks/NitamoniDas')
20 files changed, 16180 insertions, 0 deletions
diff --git a/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction.ipynb b/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction.ipynb new file mode 100755 index 00000000..7eb86cba --- /dev/null +++ b/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction.ipynb @@ -0,0 +1,809 @@ +{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:cceaf517d4ab644356e85522addd8c655c7a27bbc143387c58a9d5656be364df"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.1, page no: 208"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 8: Data Abstraction through Classes and User-Defined Data Types "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Super:\n",
+ " def __init__(self):\n",
+ " self.__IntegerData=None #private member\n",
+ " #public functions\n",
+ " def SetData(self,i):\n",
+ " self.__IntegerData=i #refer to IntegerData\n",
+ " def ShowData(self):\n",
+ " print \"Data is \",self.__IntegerData,' '\n",
+ "\n",
+ "ob1=Super()\n",
+ "ob2=Super()\n",
+ "ob1.SetData(1000)\n",
+ "ob2.SetData(2000)\n",
+ "ob1.ShowData()\n",
+ "ob2.ShowData()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Data is 1000 \n",
+ "Data is 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.2, page no:211"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " def __init__(self):\n",
+ " self.a=None #private members\n",
+ " self.b=None #private members\n",
+ " \n",
+ "#no structure type present in python \n",
+ "x = X()\n",
+ "\n",
+ "x.a=0\n",
+ "x.b=1\n",
+ "print \"x.a=\",x.a,\",x.b=\",x.b"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "x.a= 0 ,x.b= 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.3, page no:214"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def SetValue(self,a,b): #public functions\n",
+ " self.__num=a \n",
+ " self.__denom=b \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 3 4\n",
+ "Numerator value set: 3\n",
+ "Denominator value set: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.4, page no:216"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " def __init__(self):\n",
+ " self.__i=None #private member\n",
+ " \n",
+ " def __init__(self):\n",
+ " self.__i=500 #constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__i=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__i\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "print \"s1 has data: \",s1.GetData()\n",
+ "print \"s2 has data: \",s2.GetData()\n",
+ "s1.SetData(1000) #function call\n",
+ "s2.SetData(2000)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \", s2.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500\n",
+ "s2 has data: 500\n",
+ "s1 has data: 1000 \n",
+ "s2 has data: 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.5, page no:217"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " __IntegerData=None\n",
+ " def __init__(self,data=None):\n",
+ " if data==None:\n",
+ " self.__IntegerData=500 #default constructor\n",
+ " else:\n",
+ " self.__IntegerData=data #parameterised constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__IntegerData=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__IntegerData\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "s3=SimpleClass(400)\n",
+ "s4=SimpleClass(600)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \",s2.GetData(),' '\n",
+ "print \"s3 has data: \",s3.GetData(),' '\n",
+ "print \"s4 has data: \",s4.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500 \n",
+ "s2 has data: 500 \n",
+ "s3 has data: 400 \n",
+ "s4 has data: 600 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.6, page no:218"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction: \n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " def __init__(self,a=0,b=1):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor\",' ',n\n",
+ " print \"Denominator set inside constructor\",' ',d\n",
+ " \n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " def GetValue(self,a,b):\n",
+ " a= self.__num\n",
+ " b= self.__denom\n",
+ " return a,b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter value of numerator and denominator: \",' ',n,d\n",
+ "f=Fraction(n,d)\n",
+ "f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter value of numerator and denominator: 3 4\n",
+ "Numerator set inside constructor 3\n",
+ "Denominator set inside constructor 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.7, page no:221"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor: \",self.__num\n",
+ " print \"Denominator set inside constructor: \",self.__denom \n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " return self.__num,self.__denom\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter the value of the numerator and denominator: \",n,d\n",
+ "f=Fraction(n,d)\n",
+ "n,d=f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "n=input(\"Please enter the value of numerator only: \")\n",
+ "f1=Fraction(n)\n",
+ "n,d=f1.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print 'ok..now I will create a fraction-no input please'\n",
+ "f2=Fraction()\n",
+ "n,d=f2.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of the numerator and denominator: 3 4\n",
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of numerator only: 3\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 1\n",
+ "ok..now I will create a fraction-no input please\n",
+ "Numerator set inside constructor: 0\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 0\n",
+ "Denominator value retrieved: 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.8, page no:223"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " \n",
+ " def __init__(self,anotherFraction=None): \n",
+ " if anotherFraction==None: #normal constructor\n",
+ " self.__num=anotherFraction\n",
+ " self.__denom=anotherFraction\n",
+ " else: #copy constructor\n",
+ " self.__num=anotherFraction.self.__num\n",
+ " self.__denom=anotherFraction.self.__denom\n",
+ " \n",
+ " \n",
+ " #public functions\n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b#refer to IntegerData\n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return a,b\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print \"Now a second clone copy is being created: \",''\n",
+ "f1=f\n",
+ "f1.GetValue(n,d)\n",
+ "print \"Clone's numerator value retrieved: \", ' ',n\n",
+ "print \"Clone's denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 5 6\n",
+ "Numerator value set: 5\n",
+ "Denominator value set: 6\n",
+ "Numerator value retrieved: 5\n",
+ "Denominator value retrieved: 6\n",
+ "Now a second clone copy is being created: \n",
+ "Clone's numerator value retrieved: 5\n",
+ "Clone's denominator value retrieved: 6\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.9, page no:229"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def MyNewHandler():\n",
+ " print \"Sorry operator new failed to allocate memory\"\n",
+ " exit(0)\n",
+ " \n",
+ "def _set_new_handler(s):\n",
+ " s()\n",
+ "#In python there is no in-built _set_new_handler function, so i made this function and passed MyNewHandler function as a parameters\n",
+ "_set_new_handler(MyNewHandler)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Sorry operator new failed to allocate memory\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.10, page no:230"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "from ctypes import * \n",
+ "class Fraction: \n",
+ " def __init__(self,a=0,b=1): \n",
+ " if isinstance(a,int): \n",
+ " c = c_int(a) \n",
+ " d = c_int(b) \n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d) \n",
+ " print 'constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " else:\n",
+ " c=c_int(a.__num[0])\n",
+ " d = c_int(a.__denom[0])\n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d)\n",
+ " print 'copy constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ " def __del__(self): \n",
+ " print 'destructor deallocates numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ "n = input(\"Please enter values of numerator: \") \n",
+ "d = input(\"Please enter values of denominator: \") \n",
+ "f = Fraction(n,d) \n",
+ "print 'Please enter another set of ' \n",
+ "n = input(\"numerator: \") \n",
+ "d = input(\"denominator: \") \n",
+ "print 'Creating fraction *pf : ' \n",
+ "pf = Fraction(n,d) \n",
+ "print 'Now a clone copy (f2) created from *pf: ' \n",
+ "f2 = Fraction(pf)\n",
+ "print 'Now another clone copy (*pf2) created from f:' \n",
+ "pf2 = Fraction(f) \n",
+ "print '*pf2 is being destroyed:' \n",
+ "del pf2\n",
+ "print '*pf is being destroyed:' \n",
+ "del pf \n",
+ "print 'now objects f2 and f automatically destroyed : '"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of numerator: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of denominator: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "constructor sets numerator = 3 , denominator = 4\n",
+ "Please enter another set of \n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "numerator: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "denominator: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Creating fraction *pf : \n",
+ "constructor sets numerator = 5 , denominator = 6\n",
+ "Now a clone copy (f2) created from *pf: \n",
+ "copy constructor sets numerator = 5 , denominator = 6\n",
+ "Now another clone copy (*pf2) created from f:\n",
+ "copy constructor sets numerator = 3 , denominator = 4\n",
+ "*pf2 is being destroyed:\n",
+ "*pf is being destroyed:\n",
+ "now objects f2 and f automatically destroyed : \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.11, page no:234"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def Memfail(self,s):\n",
+ " print \"Sorry Unable to allocate memory\"\n",
+ " sys.exit(0)\n",
+ "\n",
+ "MAX_SIZE = 60 + 1\n",
+ "\n",
+ "MAX_SIZE=[[0 for col in range(MAX_SIZE)]for row in range(MAX_SIZE)]\n",
+ "nChar=0\n",
+ "chArr=\"Hello\"\n",
+ "\n",
+ "print \"Please input a string( 60 characters max.): \",chArr\n",
+ "\n",
+ "nChar=len(chArr)+1\n",
+ "szStr=chArr\n",
+ "print \"required memory space for\",nChar,\n",
+ "print \"characters\"\n",
+ "chArr=szStr #string copy\n",
+ "szStr=chArr\n",
+ "print \"String copied in allocated space: \",szStr\n",
+ "print \"Memory space dellocated\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please input a string( 60 characters max.): Hello\n",
+ "required memory space for 6 characters\n",
+ "String copied in allocated space: Hello\n",
+ "Memory space dellocated\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.12, page no:236"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return self.__num,self.__denom\n",
+ "n=4\n",
+ "d=5\n",
+ "f=Fraction(4,5)\n",
+ "n,d=f.GetValue(n,d)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.13, page no:239"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " __sa=20 #initialising static member\n",
+ " a = None\n",
+ " def __init__(self):\n",
+ " self.a=None #public member\n",
+ " def f(self,b):\n",
+ " a=30\n",
+ " print \"Global a= \",b\n",
+ " print \"Local a= \",a\n",
+ " print \"Nonstatic member a= \",self.a\n",
+ " print \"static member sa= \",self.__sa\n",
+ "\n",
+ "a=10\n",
+ "\n",
+ "aXobj=X()\n",
+ "aXobj.a=40\n",
+ "aXobj.f(a)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Global a= 10\n",
+ "Local a= 30\n",
+ "Nonstatic member a= 40\n",
+ "static member sa= 20\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+}
\ No newline at end of file diff --git a/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types.ipynb b/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types.ipynb new file mode 100755 index 00000000..a7c3a90a --- /dev/null +++ b/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types.ipynb @@ -0,0 +1,809 @@ +{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:da354bb89e19562e65167a0447837d31b8126b13ef9a65d132ea4ce7ac74a2e3"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 8: Data Abstraction through Classes and User-Defined Data Types"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.1, page no:208"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Super:\n",
+ " def __init__(self):\n",
+ " self.__IntegerData=None #private member\n",
+ " #public functions\n",
+ " def SetData(self,i):\n",
+ " self.__IntegerData=i #refer to IntegerData\n",
+ " def ShowData(self):\n",
+ " print \"Data is \",self.__IntegerData,' '\n",
+ "\n",
+ "ob1=Super()\n",
+ "ob2=Super()\n",
+ "ob1.SetData(1000)\n",
+ "ob2.SetData(2000)\n",
+ "ob1.ShowData()\n",
+ "ob2.ShowData()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Data is 1000 \n",
+ "Data is 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.2, page no:211"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " def __init__(self):\n",
+ " self.a=None #private members\n",
+ " self.b=None #private members\n",
+ " \n",
+ "#no structure type present in python \n",
+ "x = X()\n",
+ "\n",
+ "x.a=0\n",
+ "x.b=1\n",
+ "print \"x.a=\",x.a,\",x.b=\",x.b"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "x.a= 0 ,x.b= 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.3, page no:214"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def SetValue(self,a,b): #public functions\n",
+ " self.__num=a \n",
+ " self.__denom=b \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 3 4\n",
+ "Numerator value set: 3\n",
+ "Denominator value set: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.4, page no:216"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " def __init__(self):\n",
+ " self.__i=None #private member\n",
+ " \n",
+ " def __init__(self):\n",
+ " self.__i=500 #constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__i=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__i\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "print \"s1 has data: \",s1.GetData()\n",
+ "print \"s2 has data: \",s2.GetData()\n",
+ "s1.SetData(1000) #function call\n",
+ "s2.SetData(2000)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \", s2.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500\n",
+ "s2 has data: 500\n",
+ "s1 has data: 1000 \n",
+ "s2 has data: 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.5, page no:217"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " __IntegerData=None\n",
+ " def __init__(self,data=None):\n",
+ " if data==None:\n",
+ " self.__IntegerData=500 #default constructor\n",
+ " else:\n",
+ " self.__IntegerData=data #parameterised constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__IntegerData=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__IntegerData\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "s3=SimpleClass(400)\n",
+ "s4=SimpleClass(600)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \",s2.GetData(),' '\n",
+ "print \"s3 has data: \",s3.GetData(),' '\n",
+ "print \"s4 has data: \",s4.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500 \n",
+ "s2 has data: 500 \n",
+ "s3 has data: 400 \n",
+ "s4 has data: 600 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.6, page no:218"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction: \n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " def __init__(self,a=0,b=1):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor\",' ',n\n",
+ " print \"Denominator set inside constructor\",' ',d\n",
+ " \n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " def GetValue(self,a,b):\n",
+ " a= self.__num\n",
+ " b= self.__denom\n",
+ " return a,b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter value of numerator and denominator: \",' ',n,d\n",
+ "f=Fraction(n,d)\n",
+ "f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter value of numerator and denominator: 3 4\n",
+ "Numerator set inside constructor 3\n",
+ "Denominator set inside constructor 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.7, page no:221"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor: \",self.__num\n",
+ " print \"Denominator set inside constructor: \",self.__denom \n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " return self.__num,self.__denom\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter the value of the numerator and denominator: \",n,d\n",
+ "f=Fraction(n,d)\n",
+ "n,d=f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "n=input(\"Please enter the value of numerator only: \")\n",
+ "f1=Fraction(n)\n",
+ "n,d=f1.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print 'ok..now I will create a fraction-no input please'\n",
+ "f2=Fraction()\n",
+ "n,d=f2.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of the numerator and denominator: 3 4\n",
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of numerator only: 3\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 1\n",
+ "ok..now I will create a fraction-no input please\n",
+ "Numerator set inside constructor: 0\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 0\n",
+ "Denominator value retrieved: 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.8, page no:223"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " \n",
+ " def __init__(self,anotherFraction=None): \n",
+ " if anotherFraction==None: #normal constructor\n",
+ " self.__num=anotherFraction\n",
+ " self.__denom=anotherFraction\n",
+ " else: #copy constructor\n",
+ " self.__num=anotherFraction.self.__num\n",
+ " self.__denom=anotherFraction.self.__denom\n",
+ " \n",
+ " \n",
+ " #public functions\n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b#refer to IntegerData\n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return a,b\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print \"Now a second clone copy is being created: \",''\n",
+ "f1=f\n",
+ "f1.GetValue(n,d)\n",
+ "print \"Clone's numerator value retrieved: \", ' ',n\n",
+ "print \"Clone's denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 5 6\n",
+ "Numerator value set: 5\n",
+ "Denominator value set: 6\n",
+ "Numerator value retrieved: 5\n",
+ "Denominator value retrieved: 6\n",
+ "Now a second clone copy is being created: \n",
+ "Clone's numerator value retrieved: 5\n",
+ "Clone's denominator value retrieved: 6\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.9, page no:229"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def MyNewHandler():\n",
+ " print \"Sorry operator new failed to allocate memory\"\n",
+ " exit(0)\n",
+ " \n",
+ "def _set_new_handler(s):\n",
+ " s()\n",
+ "#In python there is no in-built _set_new_handler function, so i made this function and passed MyNewHandler function as a parameters\n",
+ "_set_new_handler(MyNewHandler)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Sorry operator new failed to allocate memory\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.10, page no:230"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "from ctypes import * \n",
+ "class Fraction: \n",
+ " def __init__(self,a=0,b=1): \n",
+ " if isinstance(a,int): \n",
+ " c = c_int(a) \n",
+ " d = c_int(b) \n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d) \n",
+ " print 'constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " else:\n",
+ " c=c_int(a.__num[0])\n",
+ " d = c_int(a.__denom[0])\n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d)\n",
+ " print 'copy constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ " def __del__(self): \n",
+ " print 'destructor deallocates numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ "n = input(\"Please enter values of numerator: \") \n",
+ "d = input(\"Please enter values of denominator: \") \n",
+ "f = Fraction(n,d) \n",
+ "print 'Please enter another set of ' \n",
+ "n = input(\"numerator: \") \n",
+ "d = input(\"denominator: \") \n",
+ "print 'Creating fraction *pf : ' \n",
+ "pf = Fraction(n,d) \n",
+ "print 'Now a clone copy (f2) created from *pf: ' \n",
+ "f2 = Fraction(pf)\n",
+ "print 'Now another clone copy (*pf2) created from f:' \n",
+ "pf2 = Fraction(f) \n",
+ "print '*pf2 is being destroyed:' \n",
+ "del pf2\n",
+ "print '*pf is being destroyed:' \n",
+ "del pf \n",
+ "print 'now objects f2 and f automatically destroyed : '"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of numerator: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of denominator: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "constructor sets numerator = 3 , denominator = 4\n",
+ "Please enter another set of \n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "numerator: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "denominator: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Creating fraction *pf : \n",
+ "constructor sets numerator = 5 , denominator = 6\n",
+ "Now a clone copy (f2) created from *pf: \n",
+ "copy constructor sets numerator = 5 , denominator = 6\n",
+ "Now another clone copy (*pf2) created from f:\n",
+ "copy constructor sets numerator = 3 , denominator = 4\n",
+ "*pf2 is being destroyed:\n",
+ "*pf is being destroyed:\n",
+ "now objects f2 and f automatically destroyed : \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.11, page no:234"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def Memfail(self,s):\n",
+ " print \"Sorry Unable to allocate memory\"\n",
+ " sys.exit(0)\n",
+ "\n",
+ "MAX_SIZE = 60 + 1\n",
+ "\n",
+ "MAX_SIZE=[[0 for col in range(MAX_SIZE)]for row in range(MAX_SIZE)]\n",
+ "nChar=0\n",
+ "chArr=\"Hello\"\n",
+ "\n",
+ "print \"Please input a string( 60 characters max.): \",chArr\n",
+ "\n",
+ "nChar=len(chArr)+1\n",
+ "szStr=chArr\n",
+ "print \"required memory space for\",nChar,\n",
+ "print \"characters\"\n",
+ "chArr=szStr #string copy\n",
+ "szStr=chArr\n",
+ "print \"String copied in allocated space: \",szStr\n",
+ "print \"Memory space dellocated\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please input a string( 60 characters max.): Hello\n",
+ "required memory space for 6 characters\n",
+ "String copied in allocated space: Hello\n",
+ "Memory space dellocated\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.12, page no:236"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return self.__num,self.__denom\n",
+ "n=4\n",
+ "d=5\n",
+ "f=Fraction(4,5)\n",
+ "n,d=f.GetValue(n,d)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.13, page no:239"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " __sa=20 #initialising static member\n",
+ " a = None\n",
+ " def __init__(self):\n",
+ " self.a=None #public member\n",
+ " def f(self,b):\n",
+ " a=30\n",
+ " print \"Global a= \",b\n",
+ " print \"Local a= \",a\n",
+ " print \"Nonstatic member a= \",self.a\n",
+ " print \"static member sa= \",self.__sa\n",
+ "\n",
+ "a=10\n",
+ "\n",
+ "aXobj=X()\n",
+ "aXobj.a=40\n",
+ "aXobj.f(a)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Global a= 10\n",
+ "Local a= 30\n",
+ "Nonstatic member a= 40\n",
+ "static member sa= 20\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+}
\ No newline at end of file diff --git a/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction_through_Classes_and_User_Defined_Data_Types.ipynb b/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction_through_Classes_and_User_Defined_Data_Types.ipynb new file mode 100755 index 00000000..7eb86cba --- /dev/null +++ b/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction_through_Classes_and_User_Defined_Data_Types.ipynb @@ -0,0 +1,809 @@ +{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:cceaf517d4ab644356e85522addd8c655c7a27bbc143387c58a9d5656be364df"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.1, page no: 208"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 8: Data Abstraction through Classes and User-Defined Data Types "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Super:\n",
+ " def __init__(self):\n",
+ " self.__IntegerData=None #private member\n",
+ " #public functions\n",
+ " def SetData(self,i):\n",
+ " self.__IntegerData=i #refer to IntegerData\n",
+ " def ShowData(self):\n",
+ " print \"Data is \",self.__IntegerData,' '\n",
+ "\n",
+ "ob1=Super()\n",
+ "ob2=Super()\n",
+ "ob1.SetData(1000)\n",
+ "ob2.SetData(2000)\n",
+ "ob1.ShowData()\n",
+ "ob2.ShowData()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Data is 1000 \n",
+ "Data is 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.2, page no:211"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " def __init__(self):\n",
+ " self.a=None #private members\n",
+ " self.b=None #private members\n",
+ " \n",
+ "#no structure type present in python \n",
+ "x = X()\n",
+ "\n",
+ "x.a=0\n",
+ "x.b=1\n",
+ "print \"x.a=\",x.a,\",x.b=\",x.b"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "x.a= 0 ,x.b= 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.3, page no:214"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def SetValue(self,a,b): #public functions\n",
+ " self.__num=a \n",
+ " self.__denom=b \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 3 4\n",
+ "Numerator value set: 3\n",
+ "Denominator value set: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.4, page no:216"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " def __init__(self):\n",
+ " self.__i=None #private member\n",
+ " \n",
+ " def __init__(self):\n",
+ " self.__i=500 #constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__i=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__i\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "print \"s1 has data: \",s1.GetData()\n",
+ "print \"s2 has data: \",s2.GetData()\n",
+ "s1.SetData(1000) #function call\n",
+ "s2.SetData(2000)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \", s2.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500\n",
+ "s2 has data: 500\n",
+ "s1 has data: 1000 \n",
+ "s2 has data: 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.5, page no:217"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " __IntegerData=None\n",
+ " def __init__(self,data=None):\n",
+ " if data==None:\n",
+ " self.__IntegerData=500 #default constructor\n",
+ " else:\n",
+ " self.__IntegerData=data #parameterised constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__IntegerData=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__IntegerData\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "s3=SimpleClass(400)\n",
+ "s4=SimpleClass(600)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \",s2.GetData(),' '\n",
+ "print \"s3 has data: \",s3.GetData(),' '\n",
+ "print \"s4 has data: \",s4.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500 \n",
+ "s2 has data: 500 \n",
+ "s3 has data: 400 \n",
+ "s4 has data: 600 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.6, page no:218"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction: \n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " def __init__(self,a=0,b=1):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor\",' ',n\n",
+ " print \"Denominator set inside constructor\",' ',d\n",
+ " \n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " def GetValue(self,a,b):\n",
+ " a= self.__num\n",
+ " b= self.__denom\n",
+ " return a,b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter value of numerator and denominator: \",' ',n,d\n",
+ "f=Fraction(n,d)\n",
+ "f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter value of numerator and denominator: 3 4\n",
+ "Numerator set inside constructor 3\n",
+ "Denominator set inside constructor 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.7, page no:221"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor: \",self.__num\n",
+ " print \"Denominator set inside constructor: \",self.__denom \n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " return self.__num,self.__denom\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter the value of the numerator and denominator: \",n,d\n",
+ "f=Fraction(n,d)\n",
+ "n,d=f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "n=input(\"Please enter the value of numerator only: \")\n",
+ "f1=Fraction(n)\n",
+ "n,d=f1.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print 'ok..now I will create a fraction-no input please'\n",
+ "f2=Fraction()\n",
+ "n,d=f2.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of the numerator and denominator: 3 4\n",
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of numerator only: 3\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 1\n",
+ "ok..now I will create a fraction-no input please\n",
+ "Numerator set inside constructor: 0\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 0\n",
+ "Denominator value retrieved: 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.8, page no:223"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " \n",
+ " def __init__(self,anotherFraction=None): \n",
+ " if anotherFraction==None: #normal constructor\n",
+ " self.__num=anotherFraction\n",
+ " self.__denom=anotherFraction\n",
+ " else: #copy constructor\n",
+ " self.__num=anotherFraction.self.__num\n",
+ " self.__denom=anotherFraction.self.__denom\n",
+ " \n",
+ " \n",
+ " #public functions\n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b#refer to IntegerData\n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return a,b\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print \"Now a second clone copy is being created: \",''\n",
+ "f1=f\n",
+ "f1.GetValue(n,d)\n",
+ "print \"Clone's numerator value retrieved: \", ' ',n\n",
+ "print \"Clone's denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 5 6\n",
+ "Numerator value set: 5\n",
+ "Denominator value set: 6\n",
+ "Numerator value retrieved: 5\n",
+ "Denominator value retrieved: 6\n",
+ "Now a second clone copy is being created: \n",
+ "Clone's numerator value retrieved: 5\n",
+ "Clone's denominator value retrieved: 6\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.9, page no:229"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def MyNewHandler():\n",
+ " print \"Sorry operator new failed to allocate memory\"\n",
+ " exit(0)\n",
+ " \n",
+ "def _set_new_handler(s):\n",
+ " s()\n",
+ "#In python there is no in-built _set_new_handler function, so i made this function and passed MyNewHandler function as a parameters\n",
+ "_set_new_handler(MyNewHandler)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Sorry operator new failed to allocate memory\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.10, page no:230"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "from ctypes import * \n",
+ "class Fraction: \n",
+ " def __init__(self,a=0,b=1): \n",
+ " if isinstance(a,int): \n",
+ " c = c_int(a) \n",
+ " d = c_int(b) \n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d) \n",
+ " print 'constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " else:\n",
+ " c=c_int(a.__num[0])\n",
+ " d = c_int(a.__denom[0])\n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d)\n",
+ " print 'copy constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ " def __del__(self): \n",
+ " print 'destructor deallocates numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ "n = input(\"Please enter values of numerator: \") \n",
+ "d = input(\"Please enter values of denominator: \") \n",
+ "f = Fraction(n,d) \n",
+ "print 'Please enter another set of ' \n",
+ "n = input(\"numerator: \") \n",
+ "d = input(\"denominator: \") \n",
+ "print 'Creating fraction *pf : ' \n",
+ "pf = Fraction(n,d) \n",
+ "print 'Now a clone copy (f2) created from *pf: ' \n",
+ "f2 = Fraction(pf)\n",
+ "print 'Now another clone copy (*pf2) created from f:' \n",
+ "pf2 = Fraction(f) \n",
+ "print '*pf2 is being destroyed:' \n",
+ "del pf2\n",
+ "print '*pf is being destroyed:' \n",
+ "del pf \n",
+ "print 'now objects f2 and f automatically destroyed : '"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of numerator: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of denominator: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "constructor sets numerator = 3 , denominator = 4\n",
+ "Please enter another set of \n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "numerator: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "denominator: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Creating fraction *pf : \n",
+ "constructor sets numerator = 5 , denominator = 6\n",
+ "Now a clone copy (f2) created from *pf: \n",
+ "copy constructor sets numerator = 5 , denominator = 6\n",
+ "Now another clone copy (*pf2) created from f:\n",
+ "copy constructor sets numerator = 3 , denominator = 4\n",
+ "*pf2 is being destroyed:\n",
+ "*pf is being destroyed:\n",
+ "now objects f2 and f automatically destroyed : \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.11, page no:234"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def Memfail(self,s):\n",
+ " print \"Sorry Unable to allocate memory\"\n",
+ " sys.exit(0)\n",
+ "\n",
+ "MAX_SIZE = 60 + 1\n",
+ "\n",
+ "MAX_SIZE=[[0 for col in range(MAX_SIZE)]for row in range(MAX_SIZE)]\n",
+ "nChar=0\n",
+ "chArr=\"Hello\"\n",
+ "\n",
+ "print \"Please input a string( 60 characters max.): \",chArr\n",
+ "\n",
+ "nChar=len(chArr)+1\n",
+ "szStr=chArr\n",
+ "print \"required memory space for\",nChar,\n",
+ "print \"characters\"\n",
+ "chArr=szStr #string copy\n",
+ "szStr=chArr\n",
+ "print \"String copied in allocated space: \",szStr\n",
+ "print \"Memory space dellocated\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please input a string( 60 characters max.): Hello\n",
+ "required memory space for 6 characters\n",
+ "String copied in allocated space: Hello\n",
+ "Memory space dellocated\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.12, page no:236"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return self.__num,self.__denom\n",
+ "n=4\n",
+ "d=5\n",
+ "f=Fraction(4,5)\n",
+ "n,d=f.GetValue(n,d)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.13, page no:239"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " __sa=20 #initialising static member\n",
+ " a = None\n",
+ " def __init__(self):\n",
+ " self.a=None #public member\n",
+ " def f(self,b):\n",
+ " a=30\n",
+ " print \"Global a= \",b\n",
+ " print \"Local a= \",a\n",
+ " print \"Nonstatic member a= \",self.a\n",
+ " print \"static member sa= \",self.__sa\n",
+ "\n",
+ "a=10\n",
+ "\n",
+ "aXobj=X()\n",
+ "aXobj.a=40\n",
+ "aXobj.f(a)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Global a= 10\n",
+ "Local a= 30\n",
+ "Nonstatic member a= 40\n",
+ "static member sa= 20\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+}
\ No newline at end of file diff --git a/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction_through_Classes_and_User_Defined_Data_Types_1.ipynb b/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction_through_Classes_and_User_Defined_Data_Types_1.ipynb new file mode 100755 index 00000000..7eb86cba --- /dev/null +++ b/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction_through_Classes_and_User_Defined_Data_Types_1.ipynb @@ -0,0 +1,809 @@ +{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:cceaf517d4ab644356e85522addd8c655c7a27bbc143387c58a9d5656be364df"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.1, page no: 208"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 8: Data Abstraction through Classes and User-Defined Data Types "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Super:\n",
+ " def __init__(self):\n",
+ " self.__IntegerData=None #private member\n",
+ " #public functions\n",
+ " def SetData(self,i):\n",
+ " self.__IntegerData=i #refer to IntegerData\n",
+ " def ShowData(self):\n",
+ " print \"Data is \",self.__IntegerData,' '\n",
+ "\n",
+ "ob1=Super()\n",
+ "ob2=Super()\n",
+ "ob1.SetData(1000)\n",
+ "ob2.SetData(2000)\n",
+ "ob1.ShowData()\n",
+ "ob2.ShowData()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Data is 1000 \n",
+ "Data is 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.2, page no:211"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " def __init__(self):\n",
+ " self.a=None #private members\n",
+ " self.b=None #private members\n",
+ " \n",
+ "#no structure type present in python \n",
+ "x = X()\n",
+ "\n",
+ "x.a=0\n",
+ "x.b=1\n",
+ "print \"x.a=\",x.a,\",x.b=\",x.b"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "x.a= 0 ,x.b= 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.3, page no:214"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def SetValue(self,a,b): #public functions\n",
+ " self.__num=a \n",
+ " self.__denom=b \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 3 4\n",
+ "Numerator value set: 3\n",
+ "Denominator value set: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.4, page no:216"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " def __init__(self):\n",
+ " self.__i=None #private member\n",
+ " \n",
+ " def __init__(self):\n",
+ " self.__i=500 #constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__i=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__i\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "print \"s1 has data: \",s1.GetData()\n",
+ "print \"s2 has data: \",s2.GetData()\n",
+ "s1.SetData(1000) #function call\n",
+ "s2.SetData(2000)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \", s2.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500\n",
+ "s2 has data: 500\n",
+ "s1 has data: 1000 \n",
+ "s2 has data: 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.5, page no:217"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " __IntegerData=None\n",
+ " def __init__(self,data=None):\n",
+ " if data==None:\n",
+ " self.__IntegerData=500 #default constructor\n",
+ " else:\n",
+ " self.__IntegerData=data #parameterised constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__IntegerData=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__IntegerData\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "s3=SimpleClass(400)\n",
+ "s4=SimpleClass(600)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \",s2.GetData(),' '\n",
+ "print \"s3 has data: \",s3.GetData(),' '\n",
+ "print \"s4 has data: \",s4.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500 \n",
+ "s2 has data: 500 \n",
+ "s3 has data: 400 \n",
+ "s4 has data: 600 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.6, page no:218"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction: \n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " def __init__(self,a=0,b=1):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor\",' ',n\n",
+ " print \"Denominator set inside constructor\",' ',d\n",
+ " \n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " def GetValue(self,a,b):\n",
+ " a= self.__num\n",
+ " b= self.__denom\n",
+ " return a,b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter value of numerator and denominator: \",' ',n,d\n",
+ "f=Fraction(n,d)\n",
+ "f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter value of numerator and denominator: 3 4\n",
+ "Numerator set inside constructor 3\n",
+ "Denominator set inside constructor 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.7, page no:221"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor: \",self.__num\n",
+ " print \"Denominator set inside constructor: \",self.__denom \n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " return self.__num,self.__denom\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter the value of the numerator and denominator: \",n,d\n",
+ "f=Fraction(n,d)\n",
+ "n,d=f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "n=input(\"Please enter the value of numerator only: \")\n",
+ "f1=Fraction(n)\n",
+ "n,d=f1.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print 'ok..now I will create a fraction-no input please'\n",
+ "f2=Fraction()\n",
+ "n,d=f2.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of the numerator and denominator: 3 4\n",
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of numerator only: 3\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 1\n",
+ "ok..now I will create a fraction-no input please\n",
+ "Numerator set inside constructor: 0\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 0\n",
+ "Denominator value retrieved: 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.8, page no:223"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " \n",
+ " def __init__(self,anotherFraction=None): \n",
+ " if anotherFraction==None: #normal constructor\n",
+ " self.__num=anotherFraction\n",
+ " self.__denom=anotherFraction\n",
+ " else: #copy constructor\n",
+ " self.__num=anotherFraction.self.__num\n",
+ " self.__denom=anotherFraction.self.__denom\n",
+ " \n",
+ " \n",
+ " #public functions\n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b#refer to IntegerData\n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return a,b\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print \"Now a second clone copy is being created: \",''\n",
+ "f1=f\n",
+ "f1.GetValue(n,d)\n",
+ "print \"Clone's numerator value retrieved: \", ' ',n\n",
+ "print \"Clone's denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 5 6\n",
+ "Numerator value set: 5\n",
+ "Denominator value set: 6\n",
+ "Numerator value retrieved: 5\n",
+ "Denominator value retrieved: 6\n",
+ "Now a second clone copy is being created: \n",
+ "Clone's numerator value retrieved: 5\n",
+ "Clone's denominator value retrieved: 6\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.9, page no:229"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def MyNewHandler():\n",
+ " print \"Sorry operator new failed to allocate memory\"\n",
+ " exit(0)\n",
+ " \n",
+ "def _set_new_handler(s):\n",
+ " s()\n",
+ "#In python there is no in-built _set_new_handler function, so i made this function and passed MyNewHandler function as a parameters\n",
+ "_set_new_handler(MyNewHandler)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Sorry operator new failed to allocate memory\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.10, page no:230"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "from ctypes import * \n",
+ "class Fraction: \n",
+ " def __init__(self,a=0,b=1): \n",
+ " if isinstance(a,int): \n",
+ " c = c_int(a) \n",
+ " d = c_int(b) \n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d) \n",
+ " print 'constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " else:\n",
+ " c=c_int(a.__num[0])\n",
+ " d = c_int(a.__denom[0])\n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d)\n",
+ " print 'copy constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ " def __del__(self): \n",
+ " print 'destructor deallocates numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ "n = input(\"Please enter values of numerator: \") \n",
+ "d = input(\"Please enter values of denominator: \") \n",
+ "f = Fraction(n,d) \n",
+ "print 'Please enter another set of ' \n",
+ "n = input(\"numerator: \") \n",
+ "d = input(\"denominator: \") \n",
+ "print 'Creating fraction *pf : ' \n",
+ "pf = Fraction(n,d) \n",
+ "print 'Now a clone copy (f2) created from *pf: ' \n",
+ "f2 = Fraction(pf)\n",
+ "print 'Now another clone copy (*pf2) created from f:' \n",
+ "pf2 = Fraction(f) \n",
+ "print '*pf2 is being destroyed:' \n",
+ "del pf2\n",
+ "print '*pf is being destroyed:' \n",
+ "del pf \n",
+ "print 'now objects f2 and f automatically destroyed : '"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of numerator: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of denominator: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "constructor sets numerator = 3 , denominator = 4\n",
+ "Please enter another set of \n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "numerator: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "denominator: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Creating fraction *pf : \n",
+ "constructor sets numerator = 5 , denominator = 6\n",
+ "Now a clone copy (f2) created from *pf: \n",
+ "copy constructor sets numerator = 5 , denominator = 6\n",
+ "Now another clone copy (*pf2) created from f:\n",
+ "copy constructor sets numerator = 3 , denominator = 4\n",
+ "*pf2 is being destroyed:\n",
+ "*pf is being destroyed:\n",
+ "now objects f2 and f automatically destroyed : \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.11, page no:234"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def Memfail(self,s):\n",
+ " print \"Sorry Unable to allocate memory\"\n",
+ " sys.exit(0)\n",
+ "\n",
+ "MAX_SIZE = 60 + 1\n",
+ "\n",
+ "MAX_SIZE=[[0 for col in range(MAX_SIZE)]for row in range(MAX_SIZE)]\n",
+ "nChar=0\n",
+ "chArr=\"Hello\"\n",
+ "\n",
+ "print \"Please input a string( 60 characters max.): \",chArr\n",
+ "\n",
+ "nChar=len(chArr)+1\n",
+ "szStr=chArr\n",
+ "print \"required memory space for\",nChar,\n",
+ "print \"characters\"\n",
+ "chArr=szStr #string copy\n",
+ "szStr=chArr\n",
+ "print \"String copied in allocated space: \",szStr\n",
+ "print \"Memory space dellocated\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please input a string( 60 characters max.): Hello\n",
+ "required memory space for 6 characters\n",
+ "String copied in allocated space: Hello\n",
+ "Memory space dellocated\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.12, page no:236"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return self.__num,self.__denom\n",
+ "n=4\n",
+ "d=5\n",
+ "f=Fraction(4,5)\n",
+ "n,d=f.GetValue(n,d)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.13, page no:239"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " __sa=20 #initialising static member\n",
+ " a = None\n",
+ " def __init__(self):\n",
+ " self.a=None #public member\n",
+ " def f(self,b):\n",
+ " a=30\n",
+ " print \"Global a= \",b\n",
+ " print \"Local a= \",a\n",
+ " print \"Nonstatic member a= \",self.a\n",
+ " print \"static member sa= \",self.__sa\n",
+ "\n",
+ "a=10\n",
+ "\n",
+ "aXobj=X()\n",
+ "aXobj.a=40\n",
+ "aXobj.f(a)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Global a= 10\n",
+ "Local a= 30\n",
+ "Nonstatic member a= 40\n",
+ "static member sa= 20\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+}
\ No newline at end of file diff --git a/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction_through_Classes_and_User_Defined_Data_Types_2.ipynb b/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction_through_Classes_and_User_Defined_Data_Types_2.ipynb new file mode 100755 index 00000000..7eb86cba --- /dev/null +++ b/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction_through_Classes_and_User_Defined_Data_Types_2.ipynb @@ -0,0 +1,809 @@ +{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:cceaf517d4ab644356e85522addd8c655c7a27bbc143387c58a9d5656be364df"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.1, page no: 208"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 8: Data Abstraction through Classes and User-Defined Data Types "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Super:\n",
+ " def __init__(self):\n",
+ " self.__IntegerData=None #private member\n",
+ " #public functions\n",
+ " def SetData(self,i):\n",
+ " self.__IntegerData=i #refer to IntegerData\n",
+ " def ShowData(self):\n",
+ " print \"Data is \",self.__IntegerData,' '\n",
+ "\n",
+ "ob1=Super()\n",
+ "ob2=Super()\n",
+ "ob1.SetData(1000)\n",
+ "ob2.SetData(2000)\n",
+ "ob1.ShowData()\n",
+ "ob2.ShowData()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Data is 1000 \n",
+ "Data is 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.2, page no:211"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " def __init__(self):\n",
+ " self.a=None #private members\n",
+ " self.b=None #private members\n",
+ " \n",
+ "#no structure type present in python \n",
+ "x = X()\n",
+ "\n",
+ "x.a=0\n",
+ "x.b=1\n",
+ "print \"x.a=\",x.a,\",x.b=\",x.b"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "x.a= 0 ,x.b= 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.3, page no:214"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def SetValue(self,a,b): #public functions\n",
+ " self.__num=a \n",
+ " self.__denom=b \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 3 4\n",
+ "Numerator value set: 3\n",
+ "Denominator value set: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.4, page no:216"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " def __init__(self):\n",
+ " self.__i=None #private member\n",
+ " \n",
+ " def __init__(self):\n",
+ " self.__i=500 #constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__i=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__i\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "print \"s1 has data: \",s1.GetData()\n",
+ "print \"s2 has data: \",s2.GetData()\n",
+ "s1.SetData(1000) #function call\n",
+ "s2.SetData(2000)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \", s2.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500\n",
+ "s2 has data: 500\n",
+ "s1 has data: 1000 \n",
+ "s2 has data: 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.5, page no:217"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " __IntegerData=None\n",
+ " def __init__(self,data=None):\n",
+ " if data==None:\n",
+ " self.__IntegerData=500 #default constructor\n",
+ " else:\n",
+ " self.__IntegerData=data #parameterised constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__IntegerData=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__IntegerData\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "s3=SimpleClass(400)\n",
+ "s4=SimpleClass(600)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \",s2.GetData(),' '\n",
+ "print \"s3 has data: \",s3.GetData(),' '\n",
+ "print \"s4 has data: \",s4.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500 \n",
+ "s2 has data: 500 \n",
+ "s3 has data: 400 \n",
+ "s4 has data: 600 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.6, page no:218"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction: \n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " def __init__(self,a=0,b=1):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor\",' ',n\n",
+ " print \"Denominator set inside constructor\",' ',d\n",
+ " \n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " def GetValue(self,a,b):\n",
+ " a= self.__num\n",
+ " b= self.__denom\n",
+ " return a,b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter value of numerator and denominator: \",' ',n,d\n",
+ "f=Fraction(n,d)\n",
+ "f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter value of numerator and denominator: 3 4\n",
+ "Numerator set inside constructor 3\n",
+ "Denominator set inside constructor 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.7, page no:221"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor: \",self.__num\n",
+ " print \"Denominator set inside constructor: \",self.__denom \n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " return self.__num,self.__denom\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter the value of the numerator and denominator: \",n,d\n",
+ "f=Fraction(n,d)\n",
+ "n,d=f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "n=input(\"Please enter the value of numerator only: \")\n",
+ "f1=Fraction(n)\n",
+ "n,d=f1.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print 'ok..now I will create a fraction-no input please'\n",
+ "f2=Fraction()\n",
+ "n,d=f2.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of the numerator and denominator: 3 4\n",
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of numerator only: 3\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 1\n",
+ "ok..now I will create a fraction-no input please\n",
+ "Numerator set inside constructor: 0\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 0\n",
+ "Denominator value retrieved: 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.8, page no:223"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " \n",
+ " def __init__(self,anotherFraction=None): \n",
+ " if anotherFraction==None: #normal constructor\n",
+ " self.__num=anotherFraction\n",
+ " self.__denom=anotherFraction\n",
+ " else: #copy constructor\n",
+ " self.__num=anotherFraction.self.__num\n",
+ " self.__denom=anotherFraction.self.__denom\n",
+ " \n",
+ " \n",
+ " #public functions\n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b#refer to IntegerData\n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return a,b\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print \"Now a second clone copy is being created: \",''\n",
+ "f1=f\n",
+ "f1.GetValue(n,d)\n",
+ "print \"Clone's numerator value retrieved: \", ' ',n\n",
+ "print \"Clone's denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 5 6\n",
+ "Numerator value set: 5\n",
+ "Denominator value set: 6\n",
+ "Numerator value retrieved: 5\n",
+ "Denominator value retrieved: 6\n",
+ "Now a second clone copy is being created: \n",
+ "Clone's numerator value retrieved: 5\n",
+ "Clone's denominator value retrieved: 6\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.9, page no:229"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def MyNewHandler():\n",
+ " print \"Sorry operator new failed to allocate memory\"\n",
+ " exit(0)\n",
+ " \n",
+ "def _set_new_handler(s):\n",
+ " s()\n",
+ "#In python there is no in-built _set_new_handler function, so i made this function and passed MyNewHandler function as a parameters\n",
+ "_set_new_handler(MyNewHandler)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Sorry operator new failed to allocate memory\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.10, page no:230"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "from ctypes import * \n",
+ "class Fraction: \n",
+ " def __init__(self,a=0,b=1): \n",
+ " if isinstance(a,int): \n",
+ " c = c_int(a) \n",
+ " d = c_int(b) \n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d) \n",
+ " print 'constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " else:\n",
+ " c=c_int(a.__num[0])\n",
+ " d = c_int(a.__denom[0])\n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d)\n",
+ " print 'copy constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ " def __del__(self): \n",
+ " print 'destructor deallocates numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ "n = input(\"Please enter values of numerator: \") \n",
+ "d = input(\"Please enter values of denominator: \") \n",
+ "f = Fraction(n,d) \n",
+ "print 'Please enter another set of ' \n",
+ "n = input(\"numerator: \") \n",
+ "d = input(\"denominator: \") \n",
+ "print 'Creating fraction *pf : ' \n",
+ "pf = Fraction(n,d) \n",
+ "print 'Now a clone copy (f2) created from *pf: ' \n",
+ "f2 = Fraction(pf)\n",
+ "print 'Now another clone copy (*pf2) created from f:' \n",
+ "pf2 = Fraction(f) \n",
+ "print '*pf2 is being destroyed:' \n",
+ "del pf2\n",
+ "print '*pf is being destroyed:' \n",
+ "del pf \n",
+ "print 'now objects f2 and f automatically destroyed : '"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of numerator: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of denominator: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "constructor sets numerator = 3 , denominator = 4\n",
+ "Please enter another set of \n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "numerator: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "denominator: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Creating fraction *pf : \n",
+ "constructor sets numerator = 5 , denominator = 6\n",
+ "Now a clone copy (f2) created from *pf: \n",
+ "copy constructor sets numerator = 5 , denominator = 6\n",
+ "Now another clone copy (*pf2) created from f:\n",
+ "copy constructor sets numerator = 3 , denominator = 4\n",
+ "*pf2 is being destroyed:\n",
+ "*pf is being destroyed:\n",
+ "now objects f2 and f automatically destroyed : \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.11, page no:234"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def Memfail(self,s):\n",
+ " print \"Sorry Unable to allocate memory\"\n",
+ " sys.exit(0)\n",
+ "\n",
+ "MAX_SIZE = 60 + 1\n",
+ "\n",
+ "MAX_SIZE=[[0 for col in range(MAX_SIZE)]for row in range(MAX_SIZE)]\n",
+ "nChar=0\n",
+ "chArr=\"Hello\"\n",
+ "\n",
+ "print \"Please input a string( 60 characters max.): \",chArr\n",
+ "\n",
+ "nChar=len(chArr)+1\n",
+ "szStr=chArr\n",
+ "print \"required memory space for\",nChar,\n",
+ "print \"characters\"\n",
+ "chArr=szStr #string copy\n",
+ "szStr=chArr\n",
+ "print \"String copied in allocated space: \",szStr\n",
+ "print \"Memory space dellocated\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please input a string( 60 characters max.): Hello\n",
+ "required memory space for 6 characters\n",
+ "String copied in allocated space: Hello\n",
+ "Memory space dellocated\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.12, page no:236"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return self.__num,self.__denom\n",
+ "n=4\n",
+ "d=5\n",
+ "f=Fraction(4,5)\n",
+ "n,d=f.GetValue(n,d)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.13, page no:239"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " __sa=20 #initialising static member\n",
+ " a = None\n",
+ " def __init__(self):\n",
+ " self.a=None #public member\n",
+ " def f(self,b):\n",
+ " a=30\n",
+ " print \"Global a= \",b\n",
+ " print \"Local a= \",a\n",
+ " print \"Nonstatic member a= \",self.a\n",
+ " print \"static member sa= \",self.__sa\n",
+ "\n",
+ "a=10\n",
+ "\n",
+ "aXobj=X()\n",
+ "aXobj.a=40\n",
+ "aXobj.f(a)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Global a= 10\n",
+ "Local a= 30\n",
+ "Nonstatic member a= 40\n",
+ "static member sa= 20\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+}
\ No newline at end of file diff --git a/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction_through_Classes_and_User_Defined_Data_Types_3.ipynb b/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction_through_Classes_and_User_Defined_Data_Types_3.ipynb new file mode 100755 index 00000000..7eb86cba --- /dev/null +++ b/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction_through_Classes_and_User_Defined_Data_Types_3.ipynb @@ -0,0 +1,809 @@ +{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:cceaf517d4ab644356e85522addd8c655c7a27bbc143387c58a9d5656be364df"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.1, page no: 208"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 8: Data Abstraction through Classes and User-Defined Data Types "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Super:\n",
+ " def __init__(self):\n",
+ " self.__IntegerData=None #private member\n",
+ " #public functions\n",
+ " def SetData(self,i):\n",
+ " self.__IntegerData=i #refer to IntegerData\n",
+ " def ShowData(self):\n",
+ " print \"Data is \",self.__IntegerData,' '\n",
+ "\n",
+ "ob1=Super()\n",
+ "ob2=Super()\n",
+ "ob1.SetData(1000)\n",
+ "ob2.SetData(2000)\n",
+ "ob1.ShowData()\n",
+ "ob2.ShowData()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Data is 1000 \n",
+ "Data is 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.2, page no:211"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " def __init__(self):\n",
+ " self.a=None #private members\n",
+ " self.b=None #private members\n",
+ " \n",
+ "#no structure type present in python \n",
+ "x = X()\n",
+ "\n",
+ "x.a=0\n",
+ "x.b=1\n",
+ "print \"x.a=\",x.a,\",x.b=\",x.b"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "x.a= 0 ,x.b= 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.3, page no:214"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def SetValue(self,a,b): #public functions\n",
+ " self.__num=a \n",
+ " self.__denom=b \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 3 4\n",
+ "Numerator value set: 3\n",
+ "Denominator value set: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.4, page no:216"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " def __init__(self):\n",
+ " self.__i=None #private member\n",
+ " \n",
+ " def __init__(self):\n",
+ " self.__i=500 #constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__i=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__i\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "print \"s1 has data: \",s1.GetData()\n",
+ "print \"s2 has data: \",s2.GetData()\n",
+ "s1.SetData(1000) #function call\n",
+ "s2.SetData(2000)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \", s2.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500\n",
+ "s2 has data: 500\n",
+ "s1 has data: 1000 \n",
+ "s2 has data: 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.5, page no:217"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " __IntegerData=None\n",
+ " def __init__(self,data=None):\n",
+ " if data==None:\n",
+ " self.__IntegerData=500 #default constructor\n",
+ " else:\n",
+ " self.__IntegerData=data #parameterised constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__IntegerData=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__IntegerData\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "s3=SimpleClass(400)\n",
+ "s4=SimpleClass(600)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \",s2.GetData(),' '\n",
+ "print \"s3 has data: \",s3.GetData(),' '\n",
+ "print \"s4 has data: \",s4.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500 \n",
+ "s2 has data: 500 \n",
+ "s3 has data: 400 \n",
+ "s4 has data: 600 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.6, page no:218"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction: \n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " def __init__(self,a=0,b=1):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor\",' ',n\n",
+ " print \"Denominator set inside constructor\",' ',d\n",
+ " \n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " def GetValue(self,a,b):\n",
+ " a= self.__num\n",
+ " b= self.__denom\n",
+ " return a,b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter value of numerator and denominator: \",' ',n,d\n",
+ "f=Fraction(n,d)\n",
+ "f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter value of numerator and denominator: 3 4\n",
+ "Numerator set inside constructor 3\n",
+ "Denominator set inside constructor 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.7, page no:221"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor: \",self.__num\n",
+ " print \"Denominator set inside constructor: \",self.__denom \n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " return self.__num,self.__denom\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter the value of the numerator and denominator: \",n,d\n",
+ "f=Fraction(n,d)\n",
+ "n,d=f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "n=input(\"Please enter the value of numerator only: \")\n",
+ "f1=Fraction(n)\n",
+ "n,d=f1.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print 'ok..now I will create a fraction-no input please'\n",
+ "f2=Fraction()\n",
+ "n,d=f2.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of the numerator and denominator: 3 4\n",
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of numerator only: 3\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 1\n",
+ "ok..now I will create a fraction-no input please\n",
+ "Numerator set inside constructor: 0\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 0\n",
+ "Denominator value retrieved: 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.8, page no:223"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " \n",
+ " def __init__(self,anotherFraction=None): \n",
+ " if anotherFraction==None: #normal constructor\n",
+ " self.__num=anotherFraction\n",
+ " self.__denom=anotherFraction\n",
+ " else: #copy constructor\n",
+ " self.__num=anotherFraction.self.__num\n",
+ " self.__denom=anotherFraction.self.__denom\n",
+ " \n",
+ " \n",
+ " #public functions\n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b#refer to IntegerData\n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return a,b\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print \"Now a second clone copy is being created: \",''\n",
+ "f1=f\n",
+ "f1.GetValue(n,d)\n",
+ "print \"Clone's numerator value retrieved: \", ' ',n\n",
+ "print \"Clone's denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 5 6\n",
+ "Numerator value set: 5\n",
+ "Denominator value set: 6\n",
+ "Numerator value retrieved: 5\n",
+ "Denominator value retrieved: 6\n",
+ "Now a second clone copy is being created: \n",
+ "Clone's numerator value retrieved: 5\n",
+ "Clone's denominator value retrieved: 6\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.9, page no:229"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def MyNewHandler():\n",
+ " print \"Sorry operator new failed to allocate memory\"\n",
+ " exit(0)\n",
+ " \n",
+ "def _set_new_handler(s):\n",
+ " s()\n",
+ "#In python there is no in-built _set_new_handler function, so i made this function and passed MyNewHandler function as a parameters\n",
+ "_set_new_handler(MyNewHandler)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Sorry operator new failed to allocate memory\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.10, page no:230"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "from ctypes import * \n",
+ "class Fraction: \n",
+ " def __init__(self,a=0,b=1): \n",
+ " if isinstance(a,int): \n",
+ " c = c_int(a) \n",
+ " d = c_int(b) \n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d) \n",
+ " print 'constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " else:\n",
+ " c=c_int(a.__num[0])\n",
+ " d = c_int(a.__denom[0])\n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d)\n",
+ " print 'copy constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ " def __del__(self): \n",
+ " print 'destructor deallocates numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ "n = input(\"Please enter values of numerator: \") \n",
+ "d = input(\"Please enter values of denominator: \") \n",
+ "f = Fraction(n,d) \n",
+ "print 'Please enter another set of ' \n",
+ "n = input(\"numerator: \") \n",
+ "d = input(\"denominator: \") \n",
+ "print 'Creating fraction *pf : ' \n",
+ "pf = Fraction(n,d) \n",
+ "print 'Now a clone copy (f2) created from *pf: ' \n",
+ "f2 = Fraction(pf)\n",
+ "print 'Now another clone copy (*pf2) created from f:' \n",
+ "pf2 = Fraction(f) \n",
+ "print '*pf2 is being destroyed:' \n",
+ "del pf2\n",
+ "print '*pf is being destroyed:' \n",
+ "del pf \n",
+ "print 'now objects f2 and f automatically destroyed : '"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of numerator: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of denominator: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "constructor sets numerator = 3 , denominator = 4\n",
+ "Please enter another set of \n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "numerator: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "denominator: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Creating fraction *pf : \n",
+ "constructor sets numerator = 5 , denominator = 6\n",
+ "Now a clone copy (f2) created from *pf: \n",
+ "copy constructor sets numerator = 5 , denominator = 6\n",
+ "Now another clone copy (*pf2) created from f:\n",
+ "copy constructor sets numerator = 3 , denominator = 4\n",
+ "*pf2 is being destroyed:\n",
+ "*pf is being destroyed:\n",
+ "now objects f2 and f automatically destroyed : \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.11, page no:234"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def Memfail(self,s):\n",
+ " print \"Sorry Unable to allocate memory\"\n",
+ " sys.exit(0)\n",
+ "\n",
+ "MAX_SIZE = 60 + 1\n",
+ "\n",
+ "MAX_SIZE=[[0 for col in range(MAX_SIZE)]for row in range(MAX_SIZE)]\n",
+ "nChar=0\n",
+ "chArr=\"Hello\"\n",
+ "\n",
+ "print \"Please input a string( 60 characters max.): \",chArr\n",
+ "\n",
+ "nChar=len(chArr)+1\n",
+ "szStr=chArr\n",
+ "print \"required memory space for\",nChar,\n",
+ "print \"characters\"\n",
+ "chArr=szStr #string copy\n",
+ "szStr=chArr\n",
+ "print \"String copied in allocated space: \",szStr\n",
+ "print \"Memory space dellocated\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please input a string( 60 characters max.): Hello\n",
+ "required memory space for 6 characters\n",
+ "String copied in allocated space: Hello\n",
+ "Memory space dellocated\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.12, page no:236"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return self.__num,self.__denom\n",
+ "n=4\n",
+ "d=5\n",
+ "f=Fraction(4,5)\n",
+ "n,d=f.GetValue(n,d)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.13, page no:239"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " __sa=20 #initialising static member\n",
+ " a = None\n",
+ " def __init__(self):\n",
+ " self.a=None #public member\n",
+ " def f(self,b):\n",
+ " a=30\n",
+ " print \"Global a= \",b\n",
+ " print \"Local a= \",a\n",
+ " print \"Nonstatic member a= \",self.a\n",
+ " print \"static member sa= \",self.__sa\n",
+ "\n",
+ "a=10\n",
+ "\n",
+ "aXobj=X()\n",
+ "aXobj.a=40\n",
+ "aXobj.f(a)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Global a= 10\n",
+ "Local a= 30\n",
+ "Nonstatic member a= 40\n",
+ "static member sa= 20\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+}
\ No newline at end of file diff --git a/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction_through_Classes_and_User_Defined_Data_Types_4.ipynb b/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction_through_Classes_and_User_Defined_Data_Types_4.ipynb new file mode 100755 index 00000000..7eb86cba --- /dev/null +++ b/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction_through_Classes_and_User_Defined_Data_Types_4.ipynb @@ -0,0 +1,809 @@ +{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:cceaf517d4ab644356e85522addd8c655c7a27bbc143387c58a9d5656be364df"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.1, page no: 208"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 8: Data Abstraction through Classes and User-Defined Data Types "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Super:\n",
+ " def __init__(self):\n",
+ " self.__IntegerData=None #private member\n",
+ " #public functions\n",
+ " def SetData(self,i):\n",
+ " self.__IntegerData=i #refer to IntegerData\n",
+ " def ShowData(self):\n",
+ " print \"Data is \",self.__IntegerData,' '\n",
+ "\n",
+ "ob1=Super()\n",
+ "ob2=Super()\n",
+ "ob1.SetData(1000)\n",
+ "ob2.SetData(2000)\n",
+ "ob1.ShowData()\n",
+ "ob2.ShowData()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Data is 1000 \n",
+ "Data is 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.2, page no:211"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " def __init__(self):\n",
+ " self.a=None #private members\n",
+ " self.b=None #private members\n",
+ " \n",
+ "#no structure type present in python \n",
+ "x = X()\n",
+ "\n",
+ "x.a=0\n",
+ "x.b=1\n",
+ "print \"x.a=\",x.a,\",x.b=\",x.b"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "x.a= 0 ,x.b= 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.3, page no:214"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def SetValue(self,a,b): #public functions\n",
+ " self.__num=a \n",
+ " self.__denom=b \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 3 4\n",
+ "Numerator value set: 3\n",
+ "Denominator value set: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.4, page no:216"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " def __init__(self):\n",
+ " self.__i=None #private member\n",
+ " \n",
+ " def __init__(self):\n",
+ " self.__i=500 #constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__i=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__i\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "print \"s1 has data: \",s1.GetData()\n",
+ "print \"s2 has data: \",s2.GetData()\n",
+ "s1.SetData(1000) #function call\n",
+ "s2.SetData(2000)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \", s2.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500\n",
+ "s2 has data: 500\n",
+ "s1 has data: 1000 \n",
+ "s2 has data: 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.5, page no:217"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " __IntegerData=None\n",
+ " def __init__(self,data=None):\n",
+ " if data==None:\n",
+ " self.__IntegerData=500 #default constructor\n",
+ " else:\n",
+ " self.__IntegerData=data #parameterised constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__IntegerData=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__IntegerData\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "s3=SimpleClass(400)\n",
+ "s4=SimpleClass(600)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \",s2.GetData(),' '\n",
+ "print \"s3 has data: \",s3.GetData(),' '\n",
+ "print \"s4 has data: \",s4.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500 \n",
+ "s2 has data: 500 \n",
+ "s3 has data: 400 \n",
+ "s4 has data: 600 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.6, page no:218"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction: \n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " def __init__(self,a=0,b=1):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor\",' ',n\n",
+ " print \"Denominator set inside constructor\",' ',d\n",
+ " \n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " def GetValue(self,a,b):\n",
+ " a= self.__num\n",
+ " b= self.__denom\n",
+ " return a,b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter value of numerator and denominator: \",' ',n,d\n",
+ "f=Fraction(n,d)\n",
+ "f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter value of numerator and denominator: 3 4\n",
+ "Numerator set inside constructor 3\n",
+ "Denominator set inside constructor 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.7, page no:221"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor: \",self.__num\n",
+ " print \"Denominator set inside constructor: \",self.__denom \n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " return self.__num,self.__denom\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter the value of the numerator and denominator: \",n,d\n",
+ "f=Fraction(n,d)\n",
+ "n,d=f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "n=input(\"Please enter the value of numerator only: \")\n",
+ "f1=Fraction(n)\n",
+ "n,d=f1.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print 'ok..now I will create a fraction-no input please'\n",
+ "f2=Fraction()\n",
+ "n,d=f2.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of the numerator and denominator: 3 4\n",
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of numerator only: 3\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 1\n",
+ "ok..now I will create a fraction-no input please\n",
+ "Numerator set inside constructor: 0\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 0\n",
+ "Denominator value retrieved: 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.8, page no:223"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " \n",
+ " def __init__(self,anotherFraction=None): \n",
+ " if anotherFraction==None: #normal constructor\n",
+ " self.__num=anotherFraction\n",
+ " self.__denom=anotherFraction\n",
+ " else: #copy constructor\n",
+ " self.__num=anotherFraction.self.__num\n",
+ " self.__denom=anotherFraction.self.__denom\n",
+ " \n",
+ " \n",
+ " #public functions\n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b#refer to IntegerData\n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return a,b\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print \"Now a second clone copy is being created: \",''\n",
+ "f1=f\n",
+ "f1.GetValue(n,d)\n",
+ "print \"Clone's numerator value retrieved: \", ' ',n\n",
+ "print \"Clone's denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 5 6\n",
+ "Numerator value set: 5\n",
+ "Denominator value set: 6\n",
+ "Numerator value retrieved: 5\n",
+ "Denominator value retrieved: 6\n",
+ "Now a second clone copy is being created: \n",
+ "Clone's numerator value retrieved: 5\n",
+ "Clone's denominator value retrieved: 6\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.9, page no:229"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def MyNewHandler():\n",
+ " print \"Sorry operator new failed to allocate memory\"\n",
+ " exit(0)\n",
+ " \n",
+ "def _set_new_handler(s):\n",
+ " s()\n",
+ "#In python there is no in-built _set_new_handler function, so i made this function and passed MyNewHandler function as a parameters\n",
+ "_set_new_handler(MyNewHandler)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Sorry operator new failed to allocate memory\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.10, page no:230"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "from ctypes import * \n",
+ "class Fraction: \n",
+ " def __init__(self,a=0,b=1): \n",
+ " if isinstance(a,int): \n",
+ " c = c_int(a) \n",
+ " d = c_int(b) \n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d) \n",
+ " print 'constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " else:\n",
+ " c=c_int(a.__num[0])\n",
+ " d = c_int(a.__denom[0])\n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d)\n",
+ " print 'copy constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ " def __del__(self): \n",
+ " print 'destructor deallocates numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ "n = input(\"Please enter values of numerator: \") \n",
+ "d = input(\"Please enter values of denominator: \") \n",
+ "f = Fraction(n,d) \n",
+ "print 'Please enter another set of ' \n",
+ "n = input(\"numerator: \") \n",
+ "d = input(\"denominator: \") \n",
+ "print 'Creating fraction *pf : ' \n",
+ "pf = Fraction(n,d) \n",
+ "print 'Now a clone copy (f2) created from *pf: ' \n",
+ "f2 = Fraction(pf)\n",
+ "print 'Now another clone copy (*pf2) created from f:' \n",
+ "pf2 = Fraction(f) \n",
+ "print '*pf2 is being destroyed:' \n",
+ "del pf2\n",
+ "print '*pf is being destroyed:' \n",
+ "del pf \n",
+ "print 'now objects f2 and f automatically destroyed : '"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of numerator: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of denominator: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "constructor sets numerator = 3 , denominator = 4\n",
+ "Please enter another set of \n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "numerator: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "denominator: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Creating fraction *pf : \n",
+ "constructor sets numerator = 5 , denominator = 6\n",
+ "Now a clone copy (f2) created from *pf: \n",
+ "copy constructor sets numerator = 5 , denominator = 6\n",
+ "Now another clone copy (*pf2) created from f:\n",
+ "copy constructor sets numerator = 3 , denominator = 4\n",
+ "*pf2 is being destroyed:\n",
+ "*pf is being destroyed:\n",
+ "now objects f2 and f automatically destroyed : \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.11, page no:234"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def Memfail(self,s):\n",
+ " print \"Sorry Unable to allocate memory\"\n",
+ " sys.exit(0)\n",
+ "\n",
+ "MAX_SIZE = 60 + 1\n",
+ "\n",
+ "MAX_SIZE=[[0 for col in range(MAX_SIZE)]for row in range(MAX_SIZE)]\n",
+ "nChar=0\n",
+ "chArr=\"Hello\"\n",
+ "\n",
+ "print \"Please input a string( 60 characters max.): \",chArr\n",
+ "\n",
+ "nChar=len(chArr)+1\n",
+ "szStr=chArr\n",
+ "print \"required memory space for\",nChar,\n",
+ "print \"characters\"\n",
+ "chArr=szStr #string copy\n",
+ "szStr=chArr\n",
+ "print \"String copied in allocated space: \",szStr\n",
+ "print \"Memory space dellocated\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please input a string( 60 characters max.): Hello\n",
+ "required memory space for 6 characters\n",
+ "String copied in allocated space: Hello\n",
+ "Memory space dellocated\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.12, page no:236"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return self.__num,self.__denom\n",
+ "n=4\n",
+ "d=5\n",
+ "f=Fraction(4,5)\n",
+ "n,d=f.GetValue(n,d)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.13, page no:239"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " __sa=20 #initialising static member\n",
+ " a = None\n",
+ " def __init__(self):\n",
+ " self.a=None #public member\n",
+ " def f(self,b):\n",
+ " a=30\n",
+ " print \"Global a= \",b\n",
+ " print \"Local a= \",a\n",
+ " print \"Nonstatic member a= \",self.a\n",
+ " print \"static member sa= \",self.__sa\n",
+ "\n",
+ "a=10\n",
+ "\n",
+ "aXobj=X()\n",
+ "aXobj.a=40\n",
+ "aXobj.f(a)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Global a= 10\n",
+ "Local a= 30\n",
+ "Nonstatic member a= 40\n",
+ "static member sa= 20\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+}
\ No newline at end of file diff --git a/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction_through_Classes_and_User_Defined_Data_Types_5.ipynb b/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction_through_Classes_and_User_Defined_Data_Types_5.ipynb new file mode 100755 index 00000000..7eb86cba --- /dev/null +++ b/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction_through_Classes_and_User_Defined_Data_Types_5.ipynb @@ -0,0 +1,809 @@ +{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:cceaf517d4ab644356e85522addd8c655c7a27bbc143387c58a9d5656be364df"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.1, page no: 208"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 8: Data Abstraction through Classes and User-Defined Data Types "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Super:\n",
+ " def __init__(self):\n",
+ " self.__IntegerData=None #private member\n",
+ " #public functions\n",
+ " def SetData(self,i):\n",
+ " self.__IntegerData=i #refer to IntegerData\n",
+ " def ShowData(self):\n",
+ " print \"Data is \",self.__IntegerData,' '\n",
+ "\n",
+ "ob1=Super()\n",
+ "ob2=Super()\n",
+ "ob1.SetData(1000)\n",
+ "ob2.SetData(2000)\n",
+ "ob1.ShowData()\n",
+ "ob2.ShowData()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Data is 1000 \n",
+ "Data is 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.2, page no:211"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " def __init__(self):\n",
+ " self.a=None #private members\n",
+ " self.b=None #private members\n",
+ " \n",
+ "#no structure type present in python \n",
+ "x = X()\n",
+ "\n",
+ "x.a=0\n",
+ "x.b=1\n",
+ "print \"x.a=\",x.a,\",x.b=\",x.b"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "x.a= 0 ,x.b= 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.3, page no:214"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def SetValue(self,a,b): #public functions\n",
+ " self.__num=a \n",
+ " self.__denom=b \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 3 4\n",
+ "Numerator value set: 3\n",
+ "Denominator value set: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.4, page no:216"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " def __init__(self):\n",
+ " self.__i=None #private member\n",
+ " \n",
+ " def __init__(self):\n",
+ " self.__i=500 #constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__i=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__i\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "print \"s1 has data: \",s1.GetData()\n",
+ "print \"s2 has data: \",s2.GetData()\n",
+ "s1.SetData(1000) #function call\n",
+ "s2.SetData(2000)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \", s2.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500\n",
+ "s2 has data: 500\n",
+ "s1 has data: 1000 \n",
+ "s2 has data: 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.5, page no:217"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " __IntegerData=None\n",
+ " def __init__(self,data=None):\n",
+ " if data==None:\n",
+ " self.__IntegerData=500 #default constructor\n",
+ " else:\n",
+ " self.__IntegerData=data #parameterised constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__IntegerData=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__IntegerData\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "s3=SimpleClass(400)\n",
+ "s4=SimpleClass(600)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \",s2.GetData(),' '\n",
+ "print \"s3 has data: \",s3.GetData(),' '\n",
+ "print \"s4 has data: \",s4.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500 \n",
+ "s2 has data: 500 \n",
+ "s3 has data: 400 \n",
+ "s4 has data: 600 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.6, page no:218"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction: \n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " def __init__(self,a=0,b=1):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor\",' ',n\n",
+ " print \"Denominator set inside constructor\",' ',d\n",
+ " \n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " def GetValue(self,a,b):\n",
+ " a= self.__num\n",
+ " b= self.__denom\n",
+ " return a,b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter value of numerator and denominator: \",' ',n,d\n",
+ "f=Fraction(n,d)\n",
+ "f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter value of numerator and denominator: 3 4\n",
+ "Numerator set inside constructor 3\n",
+ "Denominator set inside constructor 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.7, page no:221"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor: \",self.__num\n",
+ " print \"Denominator set inside constructor: \",self.__denom \n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " return self.__num,self.__denom\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter the value of the numerator and denominator: \",n,d\n",
+ "f=Fraction(n,d)\n",
+ "n,d=f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "n=input(\"Please enter the value of numerator only: \")\n",
+ "f1=Fraction(n)\n",
+ "n,d=f1.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print 'ok..now I will create a fraction-no input please'\n",
+ "f2=Fraction()\n",
+ "n,d=f2.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of the numerator and denominator: 3 4\n",
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of numerator only: 3\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 1\n",
+ "ok..now I will create a fraction-no input please\n",
+ "Numerator set inside constructor: 0\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 0\n",
+ "Denominator value retrieved: 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.8, page no:223"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " \n",
+ " def __init__(self,anotherFraction=None): \n",
+ " if anotherFraction==None: #normal constructor\n",
+ " self.__num=anotherFraction\n",
+ " self.__denom=anotherFraction\n",
+ " else: #copy constructor\n",
+ " self.__num=anotherFraction.self.__num\n",
+ " self.__denom=anotherFraction.self.__denom\n",
+ " \n",
+ " \n",
+ " #public functions\n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b#refer to IntegerData\n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return a,b\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print \"Now a second clone copy is being created: \",''\n",
+ "f1=f\n",
+ "f1.GetValue(n,d)\n",
+ "print \"Clone's numerator value retrieved: \", ' ',n\n",
+ "print \"Clone's denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 5 6\n",
+ "Numerator value set: 5\n",
+ "Denominator value set: 6\n",
+ "Numerator value retrieved: 5\n",
+ "Denominator value retrieved: 6\n",
+ "Now a second clone copy is being created: \n",
+ "Clone's numerator value retrieved: 5\n",
+ "Clone's denominator value retrieved: 6\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.9, page no:229"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def MyNewHandler():\n",
+ " print \"Sorry operator new failed to allocate memory\"\n",
+ " exit(0)\n",
+ " \n",
+ "def _set_new_handler(s):\n",
+ " s()\n",
+ "#In python there is no in-built _set_new_handler function, so i made this function and passed MyNewHandler function as a parameters\n",
+ "_set_new_handler(MyNewHandler)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Sorry operator new failed to allocate memory\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.10, page no:230"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "from ctypes import * \n",
+ "class Fraction: \n",
+ " def __init__(self,a=0,b=1): \n",
+ " if isinstance(a,int): \n",
+ " c = c_int(a) \n",
+ " d = c_int(b) \n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d) \n",
+ " print 'constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " else:\n",
+ " c=c_int(a.__num[0])\n",
+ " d = c_int(a.__denom[0])\n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d)\n",
+ " print 'copy constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ " def __del__(self): \n",
+ " print 'destructor deallocates numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ "n = input(\"Please enter values of numerator: \") \n",
+ "d = input(\"Please enter values of denominator: \") \n",
+ "f = Fraction(n,d) \n",
+ "print 'Please enter another set of ' \n",
+ "n = input(\"numerator: \") \n",
+ "d = input(\"denominator: \") \n",
+ "print 'Creating fraction *pf : ' \n",
+ "pf = Fraction(n,d) \n",
+ "print 'Now a clone copy (f2) created from *pf: ' \n",
+ "f2 = Fraction(pf)\n",
+ "print 'Now another clone copy (*pf2) created from f:' \n",
+ "pf2 = Fraction(f) \n",
+ "print '*pf2 is being destroyed:' \n",
+ "del pf2\n",
+ "print '*pf is being destroyed:' \n",
+ "del pf \n",
+ "print 'now objects f2 and f automatically destroyed : '"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of numerator: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of denominator: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "constructor sets numerator = 3 , denominator = 4\n",
+ "Please enter another set of \n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "numerator: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "denominator: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Creating fraction *pf : \n",
+ "constructor sets numerator = 5 , denominator = 6\n",
+ "Now a clone copy (f2) created from *pf: \n",
+ "copy constructor sets numerator = 5 , denominator = 6\n",
+ "Now another clone copy (*pf2) created from f:\n",
+ "copy constructor sets numerator = 3 , denominator = 4\n",
+ "*pf2 is being destroyed:\n",
+ "*pf is being destroyed:\n",
+ "now objects f2 and f automatically destroyed : \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.11, page no:234"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def Memfail(self,s):\n",
+ " print \"Sorry Unable to allocate memory\"\n",
+ " sys.exit(0)\n",
+ "\n",
+ "MAX_SIZE = 60 + 1\n",
+ "\n",
+ "MAX_SIZE=[[0 for col in range(MAX_SIZE)]for row in range(MAX_SIZE)]\n",
+ "nChar=0\n",
+ "chArr=\"Hello\"\n",
+ "\n",
+ "print \"Please input a string( 60 characters max.): \",chArr\n",
+ "\n",
+ "nChar=len(chArr)+1\n",
+ "szStr=chArr\n",
+ "print \"required memory space for\",nChar,\n",
+ "print \"characters\"\n",
+ "chArr=szStr #string copy\n",
+ "szStr=chArr\n",
+ "print \"String copied in allocated space: \",szStr\n",
+ "print \"Memory space dellocated\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please input a string( 60 characters max.): Hello\n",
+ "required memory space for 6 characters\n",
+ "String copied in allocated space: Hello\n",
+ "Memory space dellocated\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.12, page no:236"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return self.__num,self.__denom\n",
+ "n=4\n",
+ "d=5\n",
+ "f=Fraction(4,5)\n",
+ "n,d=f.GetValue(n,d)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.13, page no:239"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " __sa=20 #initialising static member\n",
+ " a = None\n",
+ " def __init__(self):\n",
+ " self.a=None #public member\n",
+ " def f(self,b):\n",
+ " a=30\n",
+ " print \"Global a= \",b\n",
+ " print \"Local a= \",a\n",
+ " print \"Nonstatic member a= \",self.a\n",
+ " print \"static member sa= \",self.__sa\n",
+ "\n",
+ "a=10\n",
+ "\n",
+ "aXobj=X()\n",
+ "aXobj.a=40\n",
+ "aXobj.f(a)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Global a= 10\n",
+ "Local a= 30\n",
+ "Nonstatic member a= 40\n",
+ "static member sa= 20\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+}
\ No newline at end of file diff --git a/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction_through_Classes_and_User_Defined_Data_Types_6.ipynb b/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction_through_Classes_and_User_Defined_Data_Types_6.ipynb new file mode 100755 index 00000000..7eb86cba --- /dev/null +++ b/sample_notebooks/NitamoniDas/Chapter_8_Data_Abstraction_through_Classes_and_User_Defined_Data_Types_6.ipynb @@ -0,0 +1,809 @@ +{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:cceaf517d4ab644356e85522addd8c655c7a27bbc143387c58a9d5656be364df"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.1, page no: 208"
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 8: Data Abstraction through Classes and User-Defined Data Types "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Super:\n",
+ " def __init__(self):\n",
+ " self.__IntegerData=None #private member\n",
+ " #public functions\n",
+ " def SetData(self,i):\n",
+ " self.__IntegerData=i #refer to IntegerData\n",
+ " def ShowData(self):\n",
+ " print \"Data is \",self.__IntegerData,' '\n",
+ "\n",
+ "ob1=Super()\n",
+ "ob2=Super()\n",
+ "ob1.SetData(1000)\n",
+ "ob2.SetData(2000)\n",
+ "ob1.ShowData()\n",
+ "ob2.ShowData()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Data is 1000 \n",
+ "Data is 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.2, page no:211"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " def __init__(self):\n",
+ " self.a=None #private members\n",
+ " self.b=None #private members\n",
+ " \n",
+ "#no structure type present in python \n",
+ "x = X()\n",
+ "\n",
+ "x.a=0\n",
+ "x.b=1\n",
+ "print \"x.a=\",x.a,\",x.b=\",x.b"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "x.a= 0 ,x.b= 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.3, page no:214"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def SetValue(self,a,b): #public functions\n",
+ " self.__num=a \n",
+ " self.__denom=b \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 3 4\n",
+ "Numerator value set: 3\n",
+ "Denominator value set: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.4, page no:216"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " def __init__(self):\n",
+ " self.__i=None #private member\n",
+ " \n",
+ " def __init__(self):\n",
+ " self.__i=500 #constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__i=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__i\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "print \"s1 has data: \",s1.GetData()\n",
+ "print \"s2 has data: \",s2.GetData()\n",
+ "s1.SetData(1000) #function call\n",
+ "s2.SetData(2000)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \", s2.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500\n",
+ "s2 has data: 500\n",
+ "s1 has data: 1000 \n",
+ "s2 has data: 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.5, page no:217"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " __IntegerData=None\n",
+ " def __init__(self,data=None):\n",
+ " if data==None:\n",
+ " self.__IntegerData=500 #default constructor\n",
+ " else:\n",
+ " self.__IntegerData=data #parameterised constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__IntegerData=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__IntegerData\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "s3=SimpleClass(400)\n",
+ "s4=SimpleClass(600)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \",s2.GetData(),' '\n",
+ "print \"s3 has data: \",s3.GetData(),' '\n",
+ "print \"s4 has data: \",s4.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500 \n",
+ "s2 has data: 500 \n",
+ "s3 has data: 400 \n",
+ "s4 has data: 600 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.6, page no:218"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction: \n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " def __init__(self,a=0,b=1):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor\",' ',n\n",
+ " print \"Denominator set inside constructor\",' ',d\n",
+ " \n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " def GetValue(self,a,b):\n",
+ " a= self.__num\n",
+ " b= self.__denom\n",
+ " return a,b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter value of numerator and denominator: \",' ',n,d\n",
+ "f=Fraction(n,d)\n",
+ "f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter value of numerator and denominator: 3 4\n",
+ "Numerator set inside constructor 3\n",
+ "Denominator set inside constructor 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.7, page no:221"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor: \",self.__num\n",
+ " print \"Denominator set inside constructor: \",self.__denom \n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " return self.__num,self.__denom\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter the value of the numerator and denominator: \",n,d\n",
+ "f=Fraction(n,d)\n",
+ "n,d=f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "n=input(\"Please enter the value of numerator only: \")\n",
+ "f1=Fraction(n)\n",
+ "n,d=f1.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print 'ok..now I will create a fraction-no input please'\n",
+ "f2=Fraction()\n",
+ "n,d=f2.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of the numerator and denominator: 3 4\n",
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of numerator only: 3\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 1\n",
+ "ok..now I will create a fraction-no input please\n",
+ "Numerator set inside constructor: 0\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 0\n",
+ "Denominator value retrieved: 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.8, page no:223"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " \n",
+ " def __init__(self,anotherFraction=None): \n",
+ " if anotherFraction==None: #normal constructor\n",
+ " self.__num=anotherFraction\n",
+ " self.__denom=anotherFraction\n",
+ " else: #copy constructor\n",
+ " self.__num=anotherFraction.self.__num\n",
+ " self.__denom=anotherFraction.self.__denom\n",
+ " \n",
+ " \n",
+ " #public functions\n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b#refer to IntegerData\n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return a,b\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print \"Now a second clone copy is being created: \",''\n",
+ "f1=f\n",
+ "f1.GetValue(n,d)\n",
+ "print \"Clone's numerator value retrieved: \", ' ',n\n",
+ "print \"Clone's denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 5 6\n",
+ "Numerator value set: 5\n",
+ "Denominator value set: 6\n",
+ "Numerator value retrieved: 5\n",
+ "Denominator value retrieved: 6\n",
+ "Now a second clone copy is being created: \n",
+ "Clone's numerator value retrieved: 5\n",
+ "Clone's denominator value retrieved: 6\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.9, page no:229"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def MyNewHandler():\n",
+ " print \"Sorry operator new failed to allocate memory\"\n",
+ " exit(0)\n",
+ " \n",
+ "def _set_new_handler(s):\n",
+ " s()\n",
+ "#In python there is no in-built _set_new_handler function, so i made this function and passed MyNewHandler function as a parameters\n",
+ "_set_new_handler(MyNewHandler)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Sorry operator new failed to allocate memory\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.10, page no:230"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "from ctypes import * \n",
+ "class Fraction: \n",
+ " def __init__(self,a=0,b=1): \n",
+ " if isinstance(a,int): \n",
+ " c = c_int(a) \n",
+ " d = c_int(b) \n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d) \n",
+ " print 'constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " else:\n",
+ " c=c_int(a.__num[0])\n",
+ " d = c_int(a.__denom[0])\n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d)\n",
+ " print 'copy constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ " def __del__(self): \n",
+ " print 'destructor deallocates numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ "n = input(\"Please enter values of numerator: \") \n",
+ "d = input(\"Please enter values of denominator: \") \n",
+ "f = Fraction(n,d) \n",
+ "print 'Please enter another set of ' \n",
+ "n = input(\"numerator: \") \n",
+ "d = input(\"denominator: \") \n",
+ "print 'Creating fraction *pf : ' \n",
+ "pf = Fraction(n,d) \n",
+ "print 'Now a clone copy (f2) created from *pf: ' \n",
+ "f2 = Fraction(pf)\n",
+ "print 'Now another clone copy (*pf2) created from f:' \n",
+ "pf2 = Fraction(f) \n",
+ "print '*pf2 is being destroyed:' \n",
+ "del pf2\n",
+ "print '*pf is being destroyed:' \n",
+ "del pf \n",
+ "print 'now objects f2 and f automatically destroyed : '"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of numerator: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of denominator: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "constructor sets numerator = 3 , denominator = 4\n",
+ "Please enter another set of \n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "numerator: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "denominator: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Creating fraction *pf : \n",
+ "constructor sets numerator = 5 , denominator = 6\n",
+ "Now a clone copy (f2) created from *pf: \n",
+ "copy constructor sets numerator = 5 , denominator = 6\n",
+ "Now another clone copy (*pf2) created from f:\n",
+ "copy constructor sets numerator = 3 , denominator = 4\n",
+ "*pf2 is being destroyed:\n",
+ "*pf is being destroyed:\n",
+ "now objects f2 and f automatically destroyed : \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.11, page no:234"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def Memfail(self,s):\n",
+ " print \"Sorry Unable to allocate memory\"\n",
+ " sys.exit(0)\n",
+ "\n",
+ "MAX_SIZE = 60 + 1\n",
+ "\n",
+ "MAX_SIZE=[[0 for col in range(MAX_SIZE)]for row in range(MAX_SIZE)]\n",
+ "nChar=0\n",
+ "chArr=\"Hello\"\n",
+ "\n",
+ "print \"Please input a string( 60 characters max.): \",chArr\n",
+ "\n",
+ "nChar=len(chArr)+1\n",
+ "szStr=chArr\n",
+ "print \"required memory space for\",nChar,\n",
+ "print \"characters\"\n",
+ "chArr=szStr #string copy\n",
+ "szStr=chArr\n",
+ "print \"String copied in allocated space: \",szStr\n",
+ "print \"Memory space dellocated\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please input a string( 60 characters max.): Hello\n",
+ "required memory space for 6 characters\n",
+ "String copied in allocated space: Hello\n",
+ "Memory space dellocated\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.12, page no:236"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return self.__num,self.__denom\n",
+ "n=4\n",
+ "d=5\n",
+ "f=Fraction(4,5)\n",
+ "n,d=f.GetValue(n,d)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.13, page no:239"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " __sa=20 #initialising static member\n",
+ " a = None\n",
+ " def __init__(self):\n",
+ " self.a=None #public member\n",
+ " def f(self,b):\n",
+ " a=30\n",
+ " print \"Global a= \",b\n",
+ " print \"Local a= \",a\n",
+ " print \"Nonstatic member a= \",self.a\n",
+ " print \"static member sa= \",self.__sa\n",
+ "\n",
+ "a=10\n",
+ "\n",
+ "aXobj=X()\n",
+ "aXobj.a=40\n",
+ "aXobj.f(a)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Global a= 10\n",
+ "Local a= 30\n",
+ "Nonstatic member a= 40\n",
+ "static member sa= 20\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+}
\ No newline at end of file diff --git a/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes.ipynb b/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes.ipynb new file mode 100755 index 00000000..1083b19a --- /dev/null +++ b/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes.ipynb @@ -0,0 +1,809 @@ +{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:dbbd8ed92141bcc804ff2fbeacf8bb85f122dc6e196e1d830291a4a449a3a439"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 8: Data Abstraction through Classes and User-Defined Data Types "
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.1, page no: 208"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Super:\n",
+ " def __init__(self):\n",
+ " self.__IntegerData=None #private member\n",
+ " #public functions\n",
+ " def SetData(self,i):\n",
+ " self.__IntegerData=i #refer to IntegerData\n",
+ " def ShowData(self):\n",
+ " print \"Data is \",self.__IntegerData,' '\n",
+ "\n",
+ "ob1=Super()\n",
+ "ob2=Super()\n",
+ "ob1.SetData(1000)\n",
+ "ob2.SetData(2000)\n",
+ "ob1.ShowData()\n",
+ "ob2.ShowData()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Data is 1000 \n",
+ "Data is 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.2, page no:211"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " def __init__(self):\n",
+ " self.a=None #private members\n",
+ " self.b=None #private members\n",
+ " \n",
+ "#no structure type present in python \n",
+ "x = X()\n",
+ "\n",
+ "x.a=0\n",
+ "x.b=1\n",
+ "print \"x.a=\",x.a,\",x.b=\",x.b"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "x.a= 0 ,x.b= 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.3, page no:214"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def SetValue(self,a,b): #public functions\n",
+ " self.__num=a \n",
+ " self.__denom=b \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 3 4\n",
+ "Numerator value set: 3\n",
+ "Denominator value set: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.4, page no:216"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " def __init__(self):\n",
+ " self.__i=None #private member\n",
+ " \n",
+ " def __init__(self):\n",
+ " self.__i=500 #constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__i=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__i\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "print \"s1 has data: \",s1.GetData()\n",
+ "print \"s2 has data: \",s2.GetData()\n",
+ "s1.SetData(1000) #function call\n",
+ "s2.SetData(2000)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \", s2.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500\n",
+ "s2 has data: 500\n",
+ "s1 has data: 1000 \n",
+ "s2 has data: 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.5, page no:217"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " __IntegerData=None\n",
+ " def __init__(self,data=None):\n",
+ " if data==None:\n",
+ " self.__IntegerData=500 #default constructor\n",
+ " else:\n",
+ " self.__IntegerData=data #parameterised constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__IntegerData=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__IntegerData\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "s3=SimpleClass(400)\n",
+ "s4=SimpleClass(600)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \",s2.GetData(),' '\n",
+ "print \"s3 has data: \",s3.GetData(),' '\n",
+ "print \"s4 has data: \",s4.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500 \n",
+ "s2 has data: 500 \n",
+ "s3 has data: 400 \n",
+ "s4 has data: 600 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.6, page no:218"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction: \n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " def __init__(self,a=0,b=1):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor\",' ',n\n",
+ " print \"Denominator set inside constructor\",' ',d\n",
+ " \n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " def GetValue(self,a,b):\n",
+ " a= self.__num\n",
+ " b= self.__denom\n",
+ " return a,b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter value of numerator and denominator: \",' ',n,d\n",
+ "f=Fraction(n,d)\n",
+ "f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter value of numerator and denominator: 3 4\n",
+ "Numerator set inside constructor 3\n",
+ "Denominator set inside constructor 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.7, page no:221"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor: \",self.__num\n",
+ " print \"Denominator set inside constructor: \",self.__denom \n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " return self.__num,self.__denom\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter the value of the numerator and denominator: \",n,d\n",
+ "f=Fraction(n,d)\n",
+ "n,d=f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "n=input(\"Please enter the value of numerator only: \")\n",
+ "f1=Fraction(n)\n",
+ "n,d=f1.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print 'ok..now I will create a fraction-no input please'\n",
+ "f2=Fraction()\n",
+ "n,d=f2.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of the numerator and denominator: 3 4\n",
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of numerator only: 3\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 1\n",
+ "ok..now I will create a fraction-no input please\n",
+ "Numerator set inside constructor: 0\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 0\n",
+ "Denominator value retrieved: 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.8, page no:223"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " \n",
+ " def __init__(self,anotherFraction=None): \n",
+ " if anotherFraction==None: #normal constructor\n",
+ " self.__num=anotherFraction\n",
+ " self.__denom=anotherFraction\n",
+ " else: #copy constructor\n",
+ " self.__num=anotherFraction.self.__num\n",
+ " self.__denom=anotherFraction.self.__denom\n",
+ " \n",
+ " \n",
+ " #public functions\n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b#refer to IntegerData\n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return a,b\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print \"Now a second clone copy is being created: \",''\n",
+ "f1=f\n",
+ "f1.GetValue(n,d)\n",
+ "print \"Clone's numerator value retrieved: \", ' ',n\n",
+ "print \"Clone's denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 5 6\n",
+ "Numerator value set: 5\n",
+ "Denominator value set: 6\n",
+ "Numerator value retrieved: 5\n",
+ "Denominator value retrieved: 6\n",
+ "Now a second clone copy is being created: \n",
+ "Clone's numerator value retrieved: 5\n",
+ "Clone's denominator value retrieved: 6\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.9, page no:229"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def MyNewHandler():\n",
+ " print \"Sorry operator new failed to allocate memory\"\n",
+ " exit(0)\n",
+ " \n",
+ "def _set_new_handler(s):\n",
+ " s()\n",
+ "#In python there is no in-built _set_new_handler function, so i made this function and passed MyNewHandler function as a parameters\n",
+ "_set_new_handler(MyNewHandler)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Sorry operator new failed to allocate memory\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.10, page no:230"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "from ctypes import * \n",
+ "class Fraction: \n",
+ " def __init__(self,a=0,b=1): \n",
+ " if isinstance(a,int): \n",
+ " c = c_int(a) \n",
+ " d = c_int(b) \n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d) \n",
+ " print 'constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " else:\n",
+ " c=c_int(a.__num[0])\n",
+ " d = c_int(a.__denom[0])\n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d)\n",
+ " print 'copy constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ " def __del__(self): \n",
+ " print 'destructor deallocates numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ "n = input(\"Please enter values of numerator: \") \n",
+ "d = input(\"Please enter values of denominator: \") \n",
+ "f = Fraction(n,d) \n",
+ "print 'Please enter another set of ' \n",
+ "n = input(\"numerator: \") \n",
+ "d = input(\"denominator: \") \n",
+ "print 'Creating fraction *pf : ' \n",
+ "pf = Fraction(n,d) \n",
+ "print 'Now a clone copy (f2) created from *pf: ' \n",
+ "f2 = Fraction(pf)\n",
+ "print 'Now another clone copy (*pf2) created from f:' \n",
+ "pf2 = Fraction(f) \n",
+ "print '*pf2 is being destroyed:' \n",
+ "del pf2\n",
+ "print '*pf is being destroyed:' \n",
+ "del pf \n",
+ "print 'now objects f2 and f automatically destroyed : '"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of numerator: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of denominator: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "constructor sets numerator = 3 , denominator = 4\n",
+ "Please enter another set of \n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "numerator: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "denominator: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Creating fraction *pf : \n",
+ "constructor sets numerator = 5 , denominator = 6\n",
+ "Now a clone copy (f2) created from *pf: \n",
+ "copy constructor sets numerator = 5 , denominator = 6\n",
+ "Now another clone copy (*pf2) created from f:\n",
+ "copy constructor sets numerator = 3 , denominator = 4\n",
+ "*pf2 is being destroyed:\n",
+ "*pf is being destroyed:\n",
+ "now objects f2 and f automatically destroyed : \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.11, page no:234"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def Memfail(self,s):\n",
+ " print \"Sorry Unable to allocate memory\"\n",
+ " sys.exit(0)\n",
+ "\n",
+ "MAX_SIZE = 60 + 1\n",
+ "\n",
+ "MAX_SIZE=[[0 for col in range(MAX_SIZE)]for row in range(MAX_SIZE)]\n",
+ "nChar=0\n",
+ "chArr=\"Hello\"\n",
+ "\n",
+ "print \"Please input a string( 60 characters max.): \",chArr\n",
+ "\n",
+ "nChar=len(chArr)+1\n",
+ "szStr=chArr\n",
+ "print \"required memory space for\",nChar,\n",
+ "print \"characters\"\n",
+ "chArr=szStr #string copy\n",
+ "szStr=chArr\n",
+ "print \"String copied in allocated space: \",szStr\n",
+ "print \"Memory space dellocated\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please input a string( 60 characters max.): Hello\n",
+ "required memory space for 6 characters\n",
+ "String copied in allocated space: Hello\n",
+ "Memory space dellocated\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.12, page no:236"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return self.__num,self.__denom\n",
+ "n=4\n",
+ "d=5\n",
+ "f=Fraction(4,5)\n",
+ "n,d=f.GetValue(n,d)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.13, page no:239"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " __sa=20 #initialising static member\n",
+ " a = None\n",
+ " def __init__(self):\n",
+ " self.a=None #public member\n",
+ " def f(self,b):\n",
+ " a=30\n",
+ " print \"Global a= \",b\n",
+ " print \"Local a= \",a\n",
+ " print \"Nonstatic member a= \",self.a\n",
+ " print \"static member sa= \",self.__sa\n",
+ "\n",
+ "a=10\n",
+ "\n",
+ "aXobj=X()\n",
+ "aXobj.a=40\n",
+ "aXobj.f(a)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Global a= 10\n",
+ "Local a= 30\n",
+ "Nonstatic member a= 40\n",
+ "static member sa= 20\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+}
\ No newline at end of file diff --git a/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_(1).ipynb b/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_(1).ipynb new file mode 100755 index 00000000..1083b19a --- /dev/null +++ b/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_(1).ipynb @@ -0,0 +1,809 @@ +{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:dbbd8ed92141bcc804ff2fbeacf8bb85f122dc6e196e1d830291a4a449a3a439"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 8: Data Abstraction through Classes and User-Defined Data Types "
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.1, page no: 208"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Super:\n",
+ " def __init__(self):\n",
+ " self.__IntegerData=None #private member\n",
+ " #public functions\n",
+ " def SetData(self,i):\n",
+ " self.__IntegerData=i #refer to IntegerData\n",
+ " def ShowData(self):\n",
+ " print \"Data is \",self.__IntegerData,' '\n",
+ "\n",
+ "ob1=Super()\n",
+ "ob2=Super()\n",
+ "ob1.SetData(1000)\n",
+ "ob2.SetData(2000)\n",
+ "ob1.ShowData()\n",
+ "ob2.ShowData()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Data is 1000 \n",
+ "Data is 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.2, page no:211"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " def __init__(self):\n",
+ " self.a=None #private members\n",
+ " self.b=None #private members\n",
+ " \n",
+ "#no structure type present in python \n",
+ "x = X()\n",
+ "\n",
+ "x.a=0\n",
+ "x.b=1\n",
+ "print \"x.a=\",x.a,\",x.b=\",x.b"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "x.a= 0 ,x.b= 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.3, page no:214"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def SetValue(self,a,b): #public functions\n",
+ " self.__num=a \n",
+ " self.__denom=b \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 3 4\n",
+ "Numerator value set: 3\n",
+ "Denominator value set: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.4, page no:216"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " def __init__(self):\n",
+ " self.__i=None #private member\n",
+ " \n",
+ " def __init__(self):\n",
+ " self.__i=500 #constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__i=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__i\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "print \"s1 has data: \",s1.GetData()\n",
+ "print \"s2 has data: \",s2.GetData()\n",
+ "s1.SetData(1000) #function call\n",
+ "s2.SetData(2000)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \", s2.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500\n",
+ "s2 has data: 500\n",
+ "s1 has data: 1000 \n",
+ "s2 has data: 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.5, page no:217"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " __IntegerData=None\n",
+ " def __init__(self,data=None):\n",
+ " if data==None:\n",
+ " self.__IntegerData=500 #default constructor\n",
+ " else:\n",
+ " self.__IntegerData=data #parameterised constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__IntegerData=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__IntegerData\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "s3=SimpleClass(400)\n",
+ "s4=SimpleClass(600)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \",s2.GetData(),' '\n",
+ "print \"s3 has data: \",s3.GetData(),' '\n",
+ "print \"s4 has data: \",s4.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500 \n",
+ "s2 has data: 500 \n",
+ "s3 has data: 400 \n",
+ "s4 has data: 600 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.6, page no:218"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction: \n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " def __init__(self,a=0,b=1):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor\",' ',n\n",
+ " print \"Denominator set inside constructor\",' ',d\n",
+ " \n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " def GetValue(self,a,b):\n",
+ " a= self.__num\n",
+ " b= self.__denom\n",
+ " return a,b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter value of numerator and denominator: \",' ',n,d\n",
+ "f=Fraction(n,d)\n",
+ "f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter value of numerator and denominator: 3 4\n",
+ "Numerator set inside constructor 3\n",
+ "Denominator set inside constructor 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.7, page no:221"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor: \",self.__num\n",
+ " print \"Denominator set inside constructor: \",self.__denom \n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " return self.__num,self.__denom\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter the value of the numerator and denominator: \",n,d\n",
+ "f=Fraction(n,d)\n",
+ "n,d=f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "n=input(\"Please enter the value of numerator only: \")\n",
+ "f1=Fraction(n)\n",
+ "n,d=f1.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print 'ok..now I will create a fraction-no input please'\n",
+ "f2=Fraction()\n",
+ "n,d=f2.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of the numerator and denominator: 3 4\n",
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of numerator only: 3\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 1\n",
+ "ok..now I will create a fraction-no input please\n",
+ "Numerator set inside constructor: 0\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 0\n",
+ "Denominator value retrieved: 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.8, page no:223"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " \n",
+ " def __init__(self,anotherFraction=None): \n",
+ " if anotherFraction==None: #normal constructor\n",
+ " self.__num=anotherFraction\n",
+ " self.__denom=anotherFraction\n",
+ " else: #copy constructor\n",
+ " self.__num=anotherFraction.self.__num\n",
+ " self.__denom=anotherFraction.self.__denom\n",
+ " \n",
+ " \n",
+ " #public functions\n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b#refer to IntegerData\n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return a,b\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print \"Now a second clone copy is being created: \",''\n",
+ "f1=f\n",
+ "f1.GetValue(n,d)\n",
+ "print \"Clone's numerator value retrieved: \", ' ',n\n",
+ "print \"Clone's denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 5 6\n",
+ "Numerator value set: 5\n",
+ "Denominator value set: 6\n",
+ "Numerator value retrieved: 5\n",
+ "Denominator value retrieved: 6\n",
+ "Now a second clone copy is being created: \n",
+ "Clone's numerator value retrieved: 5\n",
+ "Clone's denominator value retrieved: 6\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.9, page no:229"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def MyNewHandler():\n",
+ " print \"Sorry operator new failed to allocate memory\"\n",
+ " exit(0)\n",
+ " \n",
+ "def _set_new_handler(s):\n",
+ " s()\n",
+ "#In python there is no in-built _set_new_handler function, so i made this function and passed MyNewHandler function as a parameters\n",
+ "_set_new_handler(MyNewHandler)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Sorry operator new failed to allocate memory\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.10, page no:230"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "from ctypes import * \n",
+ "class Fraction: \n",
+ " def __init__(self,a=0,b=1): \n",
+ " if isinstance(a,int): \n",
+ " c = c_int(a) \n",
+ " d = c_int(b) \n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d) \n",
+ " print 'constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " else:\n",
+ " c=c_int(a.__num[0])\n",
+ " d = c_int(a.__denom[0])\n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d)\n",
+ " print 'copy constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ " def __del__(self): \n",
+ " print 'destructor deallocates numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ "n = input(\"Please enter values of numerator: \") \n",
+ "d = input(\"Please enter values of denominator: \") \n",
+ "f = Fraction(n,d) \n",
+ "print 'Please enter another set of ' \n",
+ "n = input(\"numerator: \") \n",
+ "d = input(\"denominator: \") \n",
+ "print 'Creating fraction *pf : ' \n",
+ "pf = Fraction(n,d) \n",
+ "print 'Now a clone copy (f2) created from *pf: ' \n",
+ "f2 = Fraction(pf)\n",
+ "print 'Now another clone copy (*pf2) created from f:' \n",
+ "pf2 = Fraction(f) \n",
+ "print '*pf2 is being destroyed:' \n",
+ "del pf2\n",
+ "print '*pf is being destroyed:' \n",
+ "del pf \n",
+ "print 'now objects f2 and f automatically destroyed : '"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of numerator: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of denominator: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "constructor sets numerator = 3 , denominator = 4\n",
+ "Please enter another set of \n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "numerator: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "denominator: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Creating fraction *pf : \n",
+ "constructor sets numerator = 5 , denominator = 6\n",
+ "Now a clone copy (f2) created from *pf: \n",
+ "copy constructor sets numerator = 5 , denominator = 6\n",
+ "Now another clone copy (*pf2) created from f:\n",
+ "copy constructor sets numerator = 3 , denominator = 4\n",
+ "*pf2 is being destroyed:\n",
+ "*pf is being destroyed:\n",
+ "now objects f2 and f automatically destroyed : \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.11, page no:234"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def Memfail(self,s):\n",
+ " print \"Sorry Unable to allocate memory\"\n",
+ " sys.exit(0)\n",
+ "\n",
+ "MAX_SIZE = 60 + 1\n",
+ "\n",
+ "MAX_SIZE=[[0 for col in range(MAX_SIZE)]for row in range(MAX_SIZE)]\n",
+ "nChar=0\n",
+ "chArr=\"Hello\"\n",
+ "\n",
+ "print \"Please input a string( 60 characters max.): \",chArr\n",
+ "\n",
+ "nChar=len(chArr)+1\n",
+ "szStr=chArr\n",
+ "print \"required memory space for\",nChar,\n",
+ "print \"characters\"\n",
+ "chArr=szStr #string copy\n",
+ "szStr=chArr\n",
+ "print \"String copied in allocated space: \",szStr\n",
+ "print \"Memory space dellocated\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please input a string( 60 characters max.): Hello\n",
+ "required memory space for 6 characters\n",
+ "String copied in allocated space: Hello\n",
+ "Memory space dellocated\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.12, page no:236"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return self.__num,self.__denom\n",
+ "n=4\n",
+ "d=5\n",
+ "f=Fraction(4,5)\n",
+ "n,d=f.GetValue(n,d)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.13, page no:239"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " __sa=20 #initialising static member\n",
+ " a = None\n",
+ " def __init__(self):\n",
+ " self.a=None #public member\n",
+ " def f(self,b):\n",
+ " a=30\n",
+ " print \"Global a= \",b\n",
+ " print \"Local a= \",a\n",
+ " print \"Nonstatic member a= \",self.a\n",
+ " print \"static member sa= \",self.__sa\n",
+ "\n",
+ "a=10\n",
+ "\n",
+ "aXobj=X()\n",
+ "aXobj.a=40\n",
+ "aXobj.f(a)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Global a= 10\n",
+ "Local a= 30\n",
+ "Nonstatic member a= 40\n",
+ "static member sa= 20\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+}
\ No newline at end of file diff --git a/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_10.ipynb b/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_10.ipynb new file mode 100755 index 00000000..1083b19a --- /dev/null +++ b/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_10.ipynb @@ -0,0 +1,809 @@ +{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:dbbd8ed92141bcc804ff2fbeacf8bb85f122dc6e196e1d830291a4a449a3a439"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 8: Data Abstraction through Classes and User-Defined Data Types "
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.1, page no: 208"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Super:\n",
+ " def __init__(self):\n",
+ " self.__IntegerData=None #private member\n",
+ " #public functions\n",
+ " def SetData(self,i):\n",
+ " self.__IntegerData=i #refer to IntegerData\n",
+ " def ShowData(self):\n",
+ " print \"Data is \",self.__IntegerData,' '\n",
+ "\n",
+ "ob1=Super()\n",
+ "ob2=Super()\n",
+ "ob1.SetData(1000)\n",
+ "ob2.SetData(2000)\n",
+ "ob1.ShowData()\n",
+ "ob2.ShowData()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Data is 1000 \n",
+ "Data is 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.2, page no:211"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " def __init__(self):\n",
+ " self.a=None #private members\n",
+ " self.b=None #private members\n",
+ " \n",
+ "#no structure type present in python \n",
+ "x = X()\n",
+ "\n",
+ "x.a=0\n",
+ "x.b=1\n",
+ "print \"x.a=\",x.a,\",x.b=\",x.b"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "x.a= 0 ,x.b= 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.3, page no:214"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def SetValue(self,a,b): #public functions\n",
+ " self.__num=a \n",
+ " self.__denom=b \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 3 4\n",
+ "Numerator value set: 3\n",
+ "Denominator value set: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.4, page no:216"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " def __init__(self):\n",
+ " self.__i=None #private member\n",
+ " \n",
+ " def __init__(self):\n",
+ " self.__i=500 #constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__i=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__i\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "print \"s1 has data: \",s1.GetData()\n",
+ "print \"s2 has data: \",s2.GetData()\n",
+ "s1.SetData(1000) #function call\n",
+ "s2.SetData(2000)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \", s2.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500\n",
+ "s2 has data: 500\n",
+ "s1 has data: 1000 \n",
+ "s2 has data: 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.5, page no:217"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " __IntegerData=None\n",
+ " def __init__(self,data=None):\n",
+ " if data==None:\n",
+ " self.__IntegerData=500 #default constructor\n",
+ " else:\n",
+ " self.__IntegerData=data #parameterised constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__IntegerData=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__IntegerData\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "s3=SimpleClass(400)\n",
+ "s4=SimpleClass(600)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \",s2.GetData(),' '\n",
+ "print \"s3 has data: \",s3.GetData(),' '\n",
+ "print \"s4 has data: \",s4.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500 \n",
+ "s2 has data: 500 \n",
+ "s3 has data: 400 \n",
+ "s4 has data: 600 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.6, page no:218"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction: \n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " def __init__(self,a=0,b=1):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor\",' ',n\n",
+ " print \"Denominator set inside constructor\",' ',d\n",
+ " \n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " def GetValue(self,a,b):\n",
+ " a= self.__num\n",
+ " b= self.__denom\n",
+ " return a,b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter value of numerator and denominator: \",' ',n,d\n",
+ "f=Fraction(n,d)\n",
+ "f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter value of numerator and denominator: 3 4\n",
+ "Numerator set inside constructor 3\n",
+ "Denominator set inside constructor 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.7, page no:221"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor: \",self.__num\n",
+ " print \"Denominator set inside constructor: \",self.__denom \n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " return self.__num,self.__denom\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter the value of the numerator and denominator: \",n,d\n",
+ "f=Fraction(n,d)\n",
+ "n,d=f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "n=input(\"Please enter the value of numerator only: \")\n",
+ "f1=Fraction(n)\n",
+ "n,d=f1.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print 'ok..now I will create a fraction-no input please'\n",
+ "f2=Fraction()\n",
+ "n,d=f2.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of the numerator and denominator: 3 4\n",
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of numerator only: 3\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 1\n",
+ "ok..now I will create a fraction-no input please\n",
+ "Numerator set inside constructor: 0\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 0\n",
+ "Denominator value retrieved: 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.8, page no:223"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " \n",
+ " def __init__(self,anotherFraction=None): \n",
+ " if anotherFraction==None: #normal constructor\n",
+ " self.__num=anotherFraction\n",
+ " self.__denom=anotherFraction\n",
+ " else: #copy constructor\n",
+ " self.__num=anotherFraction.self.__num\n",
+ " self.__denom=anotherFraction.self.__denom\n",
+ " \n",
+ " \n",
+ " #public functions\n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b#refer to IntegerData\n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return a,b\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print \"Now a second clone copy is being created: \",''\n",
+ "f1=f\n",
+ "f1.GetValue(n,d)\n",
+ "print \"Clone's numerator value retrieved: \", ' ',n\n",
+ "print \"Clone's denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 5 6\n",
+ "Numerator value set: 5\n",
+ "Denominator value set: 6\n",
+ "Numerator value retrieved: 5\n",
+ "Denominator value retrieved: 6\n",
+ "Now a second clone copy is being created: \n",
+ "Clone's numerator value retrieved: 5\n",
+ "Clone's denominator value retrieved: 6\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.9, page no:229"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def MyNewHandler():\n",
+ " print \"Sorry operator new failed to allocate memory\"\n",
+ " exit(0)\n",
+ " \n",
+ "def _set_new_handler(s):\n",
+ " s()\n",
+ "#In python there is no in-built _set_new_handler function, so i made this function and passed MyNewHandler function as a parameters\n",
+ "_set_new_handler(MyNewHandler)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Sorry operator new failed to allocate memory\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.10, page no:230"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "from ctypes import * \n",
+ "class Fraction: \n",
+ " def __init__(self,a=0,b=1): \n",
+ " if isinstance(a,int): \n",
+ " c = c_int(a) \n",
+ " d = c_int(b) \n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d) \n",
+ " print 'constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " else:\n",
+ " c=c_int(a.__num[0])\n",
+ " d = c_int(a.__denom[0])\n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d)\n",
+ " print 'copy constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ " def __del__(self): \n",
+ " print 'destructor deallocates numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ "n = input(\"Please enter values of numerator: \") \n",
+ "d = input(\"Please enter values of denominator: \") \n",
+ "f = Fraction(n,d) \n",
+ "print 'Please enter another set of ' \n",
+ "n = input(\"numerator: \") \n",
+ "d = input(\"denominator: \") \n",
+ "print 'Creating fraction *pf : ' \n",
+ "pf = Fraction(n,d) \n",
+ "print 'Now a clone copy (f2) created from *pf: ' \n",
+ "f2 = Fraction(pf)\n",
+ "print 'Now another clone copy (*pf2) created from f:' \n",
+ "pf2 = Fraction(f) \n",
+ "print '*pf2 is being destroyed:' \n",
+ "del pf2\n",
+ "print '*pf is being destroyed:' \n",
+ "del pf \n",
+ "print 'now objects f2 and f automatically destroyed : '"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of numerator: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of denominator: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "constructor sets numerator = 3 , denominator = 4\n",
+ "Please enter another set of \n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "numerator: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "denominator: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Creating fraction *pf : \n",
+ "constructor sets numerator = 5 , denominator = 6\n",
+ "Now a clone copy (f2) created from *pf: \n",
+ "copy constructor sets numerator = 5 , denominator = 6\n",
+ "Now another clone copy (*pf2) created from f:\n",
+ "copy constructor sets numerator = 3 , denominator = 4\n",
+ "*pf2 is being destroyed:\n",
+ "*pf is being destroyed:\n",
+ "now objects f2 and f automatically destroyed : \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.11, page no:234"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def Memfail(self,s):\n",
+ " print \"Sorry Unable to allocate memory\"\n",
+ " sys.exit(0)\n",
+ "\n",
+ "MAX_SIZE = 60 + 1\n",
+ "\n",
+ "MAX_SIZE=[[0 for col in range(MAX_SIZE)]for row in range(MAX_SIZE)]\n",
+ "nChar=0\n",
+ "chArr=\"Hello\"\n",
+ "\n",
+ "print \"Please input a string( 60 characters max.): \",chArr\n",
+ "\n",
+ "nChar=len(chArr)+1\n",
+ "szStr=chArr\n",
+ "print \"required memory space for\",nChar,\n",
+ "print \"characters\"\n",
+ "chArr=szStr #string copy\n",
+ "szStr=chArr\n",
+ "print \"String copied in allocated space: \",szStr\n",
+ "print \"Memory space dellocated\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please input a string( 60 characters max.): Hello\n",
+ "required memory space for 6 characters\n",
+ "String copied in allocated space: Hello\n",
+ "Memory space dellocated\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.12, page no:236"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return self.__num,self.__denom\n",
+ "n=4\n",
+ "d=5\n",
+ "f=Fraction(4,5)\n",
+ "n,d=f.GetValue(n,d)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.13, page no:239"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " __sa=20 #initialising static member\n",
+ " a = None\n",
+ " def __init__(self):\n",
+ " self.a=None #public member\n",
+ " def f(self,b):\n",
+ " a=30\n",
+ " print \"Global a= \",b\n",
+ " print \"Local a= \",a\n",
+ " print \"Nonstatic member a= \",self.a\n",
+ " print \"static member sa= \",self.__sa\n",
+ "\n",
+ "a=10\n",
+ "\n",
+ "aXobj=X()\n",
+ "aXobj.a=40\n",
+ "aXobj.f(a)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Global a= 10\n",
+ "Local a= 30\n",
+ "Nonstatic member a= 40\n",
+ "static member sa= 20\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+}
\ No newline at end of file diff --git a/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_2.ipynb b/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_2.ipynb new file mode 100755 index 00000000..1083b19a --- /dev/null +++ b/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_2.ipynb @@ -0,0 +1,809 @@ +{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:dbbd8ed92141bcc804ff2fbeacf8bb85f122dc6e196e1d830291a4a449a3a439"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 8: Data Abstraction through Classes and User-Defined Data Types "
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.1, page no: 208"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Super:\n",
+ " def __init__(self):\n",
+ " self.__IntegerData=None #private member\n",
+ " #public functions\n",
+ " def SetData(self,i):\n",
+ " self.__IntegerData=i #refer to IntegerData\n",
+ " def ShowData(self):\n",
+ " print \"Data is \",self.__IntegerData,' '\n",
+ "\n",
+ "ob1=Super()\n",
+ "ob2=Super()\n",
+ "ob1.SetData(1000)\n",
+ "ob2.SetData(2000)\n",
+ "ob1.ShowData()\n",
+ "ob2.ShowData()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Data is 1000 \n",
+ "Data is 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.2, page no:211"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " def __init__(self):\n",
+ " self.a=None #private members\n",
+ " self.b=None #private members\n",
+ " \n",
+ "#no structure type present in python \n",
+ "x = X()\n",
+ "\n",
+ "x.a=0\n",
+ "x.b=1\n",
+ "print \"x.a=\",x.a,\",x.b=\",x.b"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "x.a= 0 ,x.b= 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.3, page no:214"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def SetValue(self,a,b): #public functions\n",
+ " self.__num=a \n",
+ " self.__denom=b \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 3 4\n",
+ "Numerator value set: 3\n",
+ "Denominator value set: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.4, page no:216"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " def __init__(self):\n",
+ " self.__i=None #private member\n",
+ " \n",
+ " def __init__(self):\n",
+ " self.__i=500 #constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__i=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__i\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "print \"s1 has data: \",s1.GetData()\n",
+ "print \"s2 has data: \",s2.GetData()\n",
+ "s1.SetData(1000) #function call\n",
+ "s2.SetData(2000)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \", s2.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500\n",
+ "s2 has data: 500\n",
+ "s1 has data: 1000 \n",
+ "s2 has data: 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.5, page no:217"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " __IntegerData=None\n",
+ " def __init__(self,data=None):\n",
+ " if data==None:\n",
+ " self.__IntegerData=500 #default constructor\n",
+ " else:\n",
+ " self.__IntegerData=data #parameterised constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__IntegerData=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__IntegerData\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "s3=SimpleClass(400)\n",
+ "s4=SimpleClass(600)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \",s2.GetData(),' '\n",
+ "print \"s3 has data: \",s3.GetData(),' '\n",
+ "print \"s4 has data: \",s4.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500 \n",
+ "s2 has data: 500 \n",
+ "s3 has data: 400 \n",
+ "s4 has data: 600 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.6, page no:218"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction: \n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " def __init__(self,a=0,b=1):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor\",' ',n\n",
+ " print \"Denominator set inside constructor\",' ',d\n",
+ " \n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " def GetValue(self,a,b):\n",
+ " a= self.__num\n",
+ " b= self.__denom\n",
+ " return a,b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter value of numerator and denominator: \",' ',n,d\n",
+ "f=Fraction(n,d)\n",
+ "f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter value of numerator and denominator: 3 4\n",
+ "Numerator set inside constructor 3\n",
+ "Denominator set inside constructor 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.7, page no:221"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor: \",self.__num\n",
+ " print \"Denominator set inside constructor: \",self.__denom \n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " return self.__num,self.__denom\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter the value of the numerator and denominator: \",n,d\n",
+ "f=Fraction(n,d)\n",
+ "n,d=f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "n=input(\"Please enter the value of numerator only: \")\n",
+ "f1=Fraction(n)\n",
+ "n,d=f1.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print 'ok..now I will create a fraction-no input please'\n",
+ "f2=Fraction()\n",
+ "n,d=f2.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of the numerator and denominator: 3 4\n",
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of numerator only: 3\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 1\n",
+ "ok..now I will create a fraction-no input please\n",
+ "Numerator set inside constructor: 0\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 0\n",
+ "Denominator value retrieved: 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.8, page no:223"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " \n",
+ " def __init__(self,anotherFraction=None): \n",
+ " if anotherFraction==None: #normal constructor\n",
+ " self.__num=anotherFraction\n",
+ " self.__denom=anotherFraction\n",
+ " else: #copy constructor\n",
+ " self.__num=anotherFraction.self.__num\n",
+ " self.__denom=anotherFraction.self.__denom\n",
+ " \n",
+ " \n",
+ " #public functions\n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b#refer to IntegerData\n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return a,b\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print \"Now a second clone copy is being created: \",''\n",
+ "f1=f\n",
+ "f1.GetValue(n,d)\n",
+ "print \"Clone's numerator value retrieved: \", ' ',n\n",
+ "print \"Clone's denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 5 6\n",
+ "Numerator value set: 5\n",
+ "Denominator value set: 6\n",
+ "Numerator value retrieved: 5\n",
+ "Denominator value retrieved: 6\n",
+ "Now a second clone copy is being created: \n",
+ "Clone's numerator value retrieved: 5\n",
+ "Clone's denominator value retrieved: 6\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.9, page no:229"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def MyNewHandler():\n",
+ " print \"Sorry operator new failed to allocate memory\"\n",
+ " exit(0)\n",
+ " \n",
+ "def _set_new_handler(s):\n",
+ " s()\n",
+ "#In python there is no in-built _set_new_handler function, so i made this function and passed MyNewHandler function as a parameters\n",
+ "_set_new_handler(MyNewHandler)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Sorry operator new failed to allocate memory\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.10, page no:230"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "from ctypes import * \n",
+ "class Fraction: \n",
+ " def __init__(self,a=0,b=1): \n",
+ " if isinstance(a,int): \n",
+ " c = c_int(a) \n",
+ " d = c_int(b) \n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d) \n",
+ " print 'constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " else:\n",
+ " c=c_int(a.__num[0])\n",
+ " d = c_int(a.__denom[0])\n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d)\n",
+ " print 'copy constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ " def __del__(self): \n",
+ " print 'destructor deallocates numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ "n = input(\"Please enter values of numerator: \") \n",
+ "d = input(\"Please enter values of denominator: \") \n",
+ "f = Fraction(n,d) \n",
+ "print 'Please enter another set of ' \n",
+ "n = input(\"numerator: \") \n",
+ "d = input(\"denominator: \") \n",
+ "print 'Creating fraction *pf : ' \n",
+ "pf = Fraction(n,d) \n",
+ "print 'Now a clone copy (f2) created from *pf: ' \n",
+ "f2 = Fraction(pf)\n",
+ "print 'Now another clone copy (*pf2) created from f:' \n",
+ "pf2 = Fraction(f) \n",
+ "print '*pf2 is being destroyed:' \n",
+ "del pf2\n",
+ "print '*pf is being destroyed:' \n",
+ "del pf \n",
+ "print 'now objects f2 and f automatically destroyed : '"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of numerator: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of denominator: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "constructor sets numerator = 3 , denominator = 4\n",
+ "Please enter another set of \n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "numerator: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "denominator: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Creating fraction *pf : \n",
+ "constructor sets numerator = 5 , denominator = 6\n",
+ "Now a clone copy (f2) created from *pf: \n",
+ "copy constructor sets numerator = 5 , denominator = 6\n",
+ "Now another clone copy (*pf2) created from f:\n",
+ "copy constructor sets numerator = 3 , denominator = 4\n",
+ "*pf2 is being destroyed:\n",
+ "*pf is being destroyed:\n",
+ "now objects f2 and f automatically destroyed : \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.11, page no:234"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def Memfail(self,s):\n",
+ " print \"Sorry Unable to allocate memory\"\n",
+ " sys.exit(0)\n",
+ "\n",
+ "MAX_SIZE = 60 + 1\n",
+ "\n",
+ "MAX_SIZE=[[0 for col in range(MAX_SIZE)]for row in range(MAX_SIZE)]\n",
+ "nChar=0\n",
+ "chArr=\"Hello\"\n",
+ "\n",
+ "print \"Please input a string( 60 characters max.): \",chArr\n",
+ "\n",
+ "nChar=len(chArr)+1\n",
+ "szStr=chArr\n",
+ "print \"required memory space for\",nChar,\n",
+ "print \"characters\"\n",
+ "chArr=szStr #string copy\n",
+ "szStr=chArr\n",
+ "print \"String copied in allocated space: \",szStr\n",
+ "print \"Memory space dellocated\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please input a string( 60 characters max.): Hello\n",
+ "required memory space for 6 characters\n",
+ "String copied in allocated space: Hello\n",
+ "Memory space dellocated\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.12, page no:236"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return self.__num,self.__denom\n",
+ "n=4\n",
+ "d=5\n",
+ "f=Fraction(4,5)\n",
+ "n,d=f.GetValue(n,d)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.13, page no:239"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " __sa=20 #initialising static member\n",
+ " a = None\n",
+ " def __init__(self):\n",
+ " self.a=None #public member\n",
+ " def f(self,b):\n",
+ " a=30\n",
+ " print \"Global a= \",b\n",
+ " print \"Local a= \",a\n",
+ " print \"Nonstatic member a= \",self.a\n",
+ " print \"static member sa= \",self.__sa\n",
+ "\n",
+ "a=10\n",
+ "\n",
+ "aXobj=X()\n",
+ "aXobj.a=40\n",
+ "aXobj.f(a)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Global a= 10\n",
+ "Local a= 30\n",
+ "Nonstatic member a= 40\n",
+ "static member sa= 20\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+}
\ No newline at end of file diff --git a/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_3.ipynb b/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_3.ipynb new file mode 100755 index 00000000..1083b19a --- /dev/null +++ b/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_3.ipynb @@ -0,0 +1,809 @@ +{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:dbbd8ed92141bcc804ff2fbeacf8bb85f122dc6e196e1d830291a4a449a3a439"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 8: Data Abstraction through Classes and User-Defined Data Types "
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.1, page no: 208"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Super:\n",
+ " def __init__(self):\n",
+ " self.__IntegerData=None #private member\n",
+ " #public functions\n",
+ " def SetData(self,i):\n",
+ " self.__IntegerData=i #refer to IntegerData\n",
+ " def ShowData(self):\n",
+ " print \"Data is \",self.__IntegerData,' '\n",
+ "\n",
+ "ob1=Super()\n",
+ "ob2=Super()\n",
+ "ob1.SetData(1000)\n",
+ "ob2.SetData(2000)\n",
+ "ob1.ShowData()\n",
+ "ob2.ShowData()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Data is 1000 \n",
+ "Data is 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.2, page no:211"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " def __init__(self):\n",
+ " self.a=None #private members\n",
+ " self.b=None #private members\n",
+ " \n",
+ "#no structure type present in python \n",
+ "x = X()\n",
+ "\n",
+ "x.a=0\n",
+ "x.b=1\n",
+ "print \"x.a=\",x.a,\",x.b=\",x.b"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "x.a= 0 ,x.b= 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.3, page no:214"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def SetValue(self,a,b): #public functions\n",
+ " self.__num=a \n",
+ " self.__denom=b \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 3 4\n",
+ "Numerator value set: 3\n",
+ "Denominator value set: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.4, page no:216"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " def __init__(self):\n",
+ " self.__i=None #private member\n",
+ " \n",
+ " def __init__(self):\n",
+ " self.__i=500 #constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__i=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__i\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "print \"s1 has data: \",s1.GetData()\n",
+ "print \"s2 has data: \",s2.GetData()\n",
+ "s1.SetData(1000) #function call\n",
+ "s2.SetData(2000)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \", s2.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500\n",
+ "s2 has data: 500\n",
+ "s1 has data: 1000 \n",
+ "s2 has data: 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.5, page no:217"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " __IntegerData=None\n",
+ " def __init__(self,data=None):\n",
+ " if data==None:\n",
+ " self.__IntegerData=500 #default constructor\n",
+ " else:\n",
+ " self.__IntegerData=data #parameterised constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__IntegerData=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__IntegerData\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "s3=SimpleClass(400)\n",
+ "s4=SimpleClass(600)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \",s2.GetData(),' '\n",
+ "print \"s3 has data: \",s3.GetData(),' '\n",
+ "print \"s4 has data: \",s4.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500 \n",
+ "s2 has data: 500 \n",
+ "s3 has data: 400 \n",
+ "s4 has data: 600 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.6, page no:218"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction: \n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " def __init__(self,a=0,b=1):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor\",' ',n\n",
+ " print \"Denominator set inside constructor\",' ',d\n",
+ " \n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " def GetValue(self,a,b):\n",
+ " a= self.__num\n",
+ " b= self.__denom\n",
+ " return a,b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter value of numerator and denominator: \",' ',n,d\n",
+ "f=Fraction(n,d)\n",
+ "f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter value of numerator and denominator: 3 4\n",
+ "Numerator set inside constructor 3\n",
+ "Denominator set inside constructor 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.7, page no:221"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor: \",self.__num\n",
+ " print \"Denominator set inside constructor: \",self.__denom \n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " return self.__num,self.__denom\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter the value of the numerator and denominator: \",n,d\n",
+ "f=Fraction(n,d)\n",
+ "n,d=f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "n=input(\"Please enter the value of numerator only: \")\n",
+ "f1=Fraction(n)\n",
+ "n,d=f1.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print 'ok..now I will create a fraction-no input please'\n",
+ "f2=Fraction()\n",
+ "n,d=f2.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of the numerator and denominator: 3 4\n",
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of numerator only: 3\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 1\n",
+ "ok..now I will create a fraction-no input please\n",
+ "Numerator set inside constructor: 0\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 0\n",
+ "Denominator value retrieved: 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.8, page no:223"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " \n",
+ " def __init__(self,anotherFraction=None): \n",
+ " if anotherFraction==None: #normal constructor\n",
+ " self.__num=anotherFraction\n",
+ " self.__denom=anotherFraction\n",
+ " else: #copy constructor\n",
+ " self.__num=anotherFraction.self.__num\n",
+ " self.__denom=anotherFraction.self.__denom\n",
+ " \n",
+ " \n",
+ " #public functions\n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b#refer to IntegerData\n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return a,b\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print \"Now a second clone copy is being created: \",''\n",
+ "f1=f\n",
+ "f1.GetValue(n,d)\n",
+ "print \"Clone's numerator value retrieved: \", ' ',n\n",
+ "print \"Clone's denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 5 6\n",
+ "Numerator value set: 5\n",
+ "Denominator value set: 6\n",
+ "Numerator value retrieved: 5\n",
+ "Denominator value retrieved: 6\n",
+ "Now a second clone copy is being created: \n",
+ "Clone's numerator value retrieved: 5\n",
+ "Clone's denominator value retrieved: 6\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.9, page no:229"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def MyNewHandler():\n",
+ " print \"Sorry operator new failed to allocate memory\"\n",
+ " exit(0)\n",
+ " \n",
+ "def _set_new_handler(s):\n",
+ " s()\n",
+ "#In python there is no in-built _set_new_handler function, so i made this function and passed MyNewHandler function as a parameters\n",
+ "_set_new_handler(MyNewHandler)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Sorry operator new failed to allocate memory\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.10, page no:230"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "from ctypes import * \n",
+ "class Fraction: \n",
+ " def __init__(self,a=0,b=1): \n",
+ " if isinstance(a,int): \n",
+ " c = c_int(a) \n",
+ " d = c_int(b) \n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d) \n",
+ " print 'constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " else:\n",
+ " c=c_int(a.__num[0])\n",
+ " d = c_int(a.__denom[0])\n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d)\n",
+ " print 'copy constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ " def __del__(self): \n",
+ " print 'destructor deallocates numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ "n = input(\"Please enter values of numerator: \") \n",
+ "d = input(\"Please enter values of denominator: \") \n",
+ "f = Fraction(n,d) \n",
+ "print 'Please enter another set of ' \n",
+ "n = input(\"numerator: \") \n",
+ "d = input(\"denominator: \") \n",
+ "print 'Creating fraction *pf : ' \n",
+ "pf = Fraction(n,d) \n",
+ "print 'Now a clone copy (f2) created from *pf: ' \n",
+ "f2 = Fraction(pf)\n",
+ "print 'Now another clone copy (*pf2) created from f:' \n",
+ "pf2 = Fraction(f) \n",
+ "print '*pf2 is being destroyed:' \n",
+ "del pf2\n",
+ "print '*pf is being destroyed:' \n",
+ "del pf \n",
+ "print 'now objects f2 and f automatically destroyed : '"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of numerator: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of denominator: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "constructor sets numerator = 3 , denominator = 4\n",
+ "Please enter another set of \n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "numerator: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "denominator: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Creating fraction *pf : \n",
+ "constructor sets numerator = 5 , denominator = 6\n",
+ "Now a clone copy (f2) created from *pf: \n",
+ "copy constructor sets numerator = 5 , denominator = 6\n",
+ "Now another clone copy (*pf2) created from f:\n",
+ "copy constructor sets numerator = 3 , denominator = 4\n",
+ "*pf2 is being destroyed:\n",
+ "*pf is being destroyed:\n",
+ "now objects f2 and f automatically destroyed : \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.11, page no:234"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def Memfail(self,s):\n",
+ " print \"Sorry Unable to allocate memory\"\n",
+ " sys.exit(0)\n",
+ "\n",
+ "MAX_SIZE = 60 + 1\n",
+ "\n",
+ "MAX_SIZE=[[0 for col in range(MAX_SIZE)]for row in range(MAX_SIZE)]\n",
+ "nChar=0\n",
+ "chArr=\"Hello\"\n",
+ "\n",
+ "print \"Please input a string( 60 characters max.): \",chArr\n",
+ "\n",
+ "nChar=len(chArr)+1\n",
+ "szStr=chArr\n",
+ "print \"required memory space for\",nChar,\n",
+ "print \"characters\"\n",
+ "chArr=szStr #string copy\n",
+ "szStr=chArr\n",
+ "print \"String copied in allocated space: \",szStr\n",
+ "print \"Memory space dellocated\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please input a string( 60 characters max.): Hello\n",
+ "required memory space for 6 characters\n",
+ "String copied in allocated space: Hello\n",
+ "Memory space dellocated\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.12, page no:236"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return self.__num,self.__denom\n",
+ "n=4\n",
+ "d=5\n",
+ "f=Fraction(4,5)\n",
+ "n,d=f.GetValue(n,d)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.13, page no:239"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " __sa=20 #initialising static member\n",
+ " a = None\n",
+ " def __init__(self):\n",
+ " self.a=None #public member\n",
+ " def f(self,b):\n",
+ " a=30\n",
+ " print \"Global a= \",b\n",
+ " print \"Local a= \",a\n",
+ " print \"Nonstatic member a= \",self.a\n",
+ " print \"static member sa= \",self.__sa\n",
+ "\n",
+ "a=10\n",
+ "\n",
+ "aXobj=X()\n",
+ "aXobj.a=40\n",
+ "aXobj.f(a)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Global a= 10\n",
+ "Local a= 30\n",
+ "Nonstatic member a= 40\n",
+ "static member sa= 20\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+}
\ No newline at end of file diff --git a/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_4.ipynb b/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_4.ipynb new file mode 100755 index 00000000..1083b19a --- /dev/null +++ b/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_4.ipynb @@ -0,0 +1,809 @@ +{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:dbbd8ed92141bcc804ff2fbeacf8bb85f122dc6e196e1d830291a4a449a3a439"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 8: Data Abstraction through Classes and User-Defined Data Types "
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.1, page no: 208"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Super:\n",
+ " def __init__(self):\n",
+ " self.__IntegerData=None #private member\n",
+ " #public functions\n",
+ " def SetData(self,i):\n",
+ " self.__IntegerData=i #refer to IntegerData\n",
+ " def ShowData(self):\n",
+ " print \"Data is \",self.__IntegerData,' '\n",
+ "\n",
+ "ob1=Super()\n",
+ "ob2=Super()\n",
+ "ob1.SetData(1000)\n",
+ "ob2.SetData(2000)\n",
+ "ob1.ShowData()\n",
+ "ob2.ShowData()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Data is 1000 \n",
+ "Data is 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.2, page no:211"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " def __init__(self):\n",
+ " self.a=None #private members\n",
+ " self.b=None #private members\n",
+ " \n",
+ "#no structure type present in python \n",
+ "x = X()\n",
+ "\n",
+ "x.a=0\n",
+ "x.b=1\n",
+ "print \"x.a=\",x.a,\",x.b=\",x.b"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "x.a= 0 ,x.b= 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.3, page no:214"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def SetValue(self,a,b): #public functions\n",
+ " self.__num=a \n",
+ " self.__denom=b \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 3 4\n",
+ "Numerator value set: 3\n",
+ "Denominator value set: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.4, page no:216"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " def __init__(self):\n",
+ " self.__i=None #private member\n",
+ " \n",
+ " def __init__(self):\n",
+ " self.__i=500 #constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__i=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__i\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "print \"s1 has data: \",s1.GetData()\n",
+ "print \"s2 has data: \",s2.GetData()\n",
+ "s1.SetData(1000) #function call\n",
+ "s2.SetData(2000)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \", s2.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500\n",
+ "s2 has data: 500\n",
+ "s1 has data: 1000 \n",
+ "s2 has data: 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.5, page no:217"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " __IntegerData=None\n",
+ " def __init__(self,data=None):\n",
+ " if data==None:\n",
+ " self.__IntegerData=500 #default constructor\n",
+ " else:\n",
+ " self.__IntegerData=data #parameterised constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__IntegerData=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__IntegerData\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "s3=SimpleClass(400)\n",
+ "s4=SimpleClass(600)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \",s2.GetData(),' '\n",
+ "print \"s3 has data: \",s3.GetData(),' '\n",
+ "print \"s4 has data: \",s4.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500 \n",
+ "s2 has data: 500 \n",
+ "s3 has data: 400 \n",
+ "s4 has data: 600 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.6, page no:218"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction: \n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " def __init__(self,a=0,b=1):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor\",' ',n\n",
+ " print \"Denominator set inside constructor\",' ',d\n",
+ " \n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " def GetValue(self,a,b):\n",
+ " a= self.__num\n",
+ " b= self.__denom\n",
+ " return a,b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter value of numerator and denominator: \",' ',n,d\n",
+ "f=Fraction(n,d)\n",
+ "f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter value of numerator and denominator: 3 4\n",
+ "Numerator set inside constructor 3\n",
+ "Denominator set inside constructor 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.7, page no:221"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor: \",self.__num\n",
+ " print \"Denominator set inside constructor: \",self.__denom \n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " return self.__num,self.__denom\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter the value of the numerator and denominator: \",n,d\n",
+ "f=Fraction(n,d)\n",
+ "n,d=f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "n=input(\"Please enter the value of numerator only: \")\n",
+ "f1=Fraction(n)\n",
+ "n,d=f1.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print 'ok..now I will create a fraction-no input please'\n",
+ "f2=Fraction()\n",
+ "n,d=f2.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of the numerator and denominator: 3 4\n",
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of numerator only: 3\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 1\n",
+ "ok..now I will create a fraction-no input please\n",
+ "Numerator set inside constructor: 0\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 0\n",
+ "Denominator value retrieved: 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.8, page no:223"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " \n",
+ " def __init__(self,anotherFraction=None): \n",
+ " if anotherFraction==None: #normal constructor\n",
+ " self.__num=anotherFraction\n",
+ " self.__denom=anotherFraction\n",
+ " else: #copy constructor\n",
+ " self.__num=anotherFraction.self.__num\n",
+ " self.__denom=anotherFraction.self.__denom\n",
+ " \n",
+ " \n",
+ " #public functions\n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b#refer to IntegerData\n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return a,b\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print \"Now a second clone copy is being created: \",''\n",
+ "f1=f\n",
+ "f1.GetValue(n,d)\n",
+ "print \"Clone's numerator value retrieved: \", ' ',n\n",
+ "print \"Clone's denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 5 6\n",
+ "Numerator value set: 5\n",
+ "Denominator value set: 6\n",
+ "Numerator value retrieved: 5\n",
+ "Denominator value retrieved: 6\n",
+ "Now a second clone copy is being created: \n",
+ "Clone's numerator value retrieved: 5\n",
+ "Clone's denominator value retrieved: 6\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.9, page no:229"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def MyNewHandler():\n",
+ " print \"Sorry operator new failed to allocate memory\"\n",
+ " exit(0)\n",
+ " \n",
+ "def _set_new_handler(s):\n",
+ " s()\n",
+ "#In python there is no in-built _set_new_handler function, so i made this function and passed MyNewHandler function as a parameters\n",
+ "_set_new_handler(MyNewHandler)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Sorry operator new failed to allocate memory\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.10, page no:230"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "from ctypes import * \n",
+ "class Fraction: \n",
+ " def __init__(self,a=0,b=1): \n",
+ " if isinstance(a,int): \n",
+ " c = c_int(a) \n",
+ " d = c_int(b) \n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d) \n",
+ " print 'constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " else:\n",
+ " c=c_int(a.__num[0])\n",
+ " d = c_int(a.__denom[0])\n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d)\n",
+ " print 'copy constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ " def __del__(self): \n",
+ " print 'destructor deallocates numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ "n = input(\"Please enter values of numerator: \") \n",
+ "d = input(\"Please enter values of denominator: \") \n",
+ "f = Fraction(n,d) \n",
+ "print 'Please enter another set of ' \n",
+ "n = input(\"numerator: \") \n",
+ "d = input(\"denominator: \") \n",
+ "print 'Creating fraction *pf : ' \n",
+ "pf = Fraction(n,d) \n",
+ "print 'Now a clone copy (f2) created from *pf: ' \n",
+ "f2 = Fraction(pf)\n",
+ "print 'Now another clone copy (*pf2) created from f:' \n",
+ "pf2 = Fraction(f) \n",
+ "print '*pf2 is being destroyed:' \n",
+ "del pf2\n",
+ "print '*pf is being destroyed:' \n",
+ "del pf \n",
+ "print 'now objects f2 and f automatically destroyed : '"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of numerator: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of denominator: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "constructor sets numerator = 3 , denominator = 4\n",
+ "Please enter another set of \n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "numerator: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "denominator: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Creating fraction *pf : \n",
+ "constructor sets numerator = 5 , denominator = 6\n",
+ "Now a clone copy (f2) created from *pf: \n",
+ "copy constructor sets numerator = 5 , denominator = 6\n",
+ "Now another clone copy (*pf2) created from f:\n",
+ "copy constructor sets numerator = 3 , denominator = 4\n",
+ "*pf2 is being destroyed:\n",
+ "*pf is being destroyed:\n",
+ "now objects f2 and f automatically destroyed : \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.11, page no:234"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def Memfail(self,s):\n",
+ " print \"Sorry Unable to allocate memory\"\n",
+ " sys.exit(0)\n",
+ "\n",
+ "MAX_SIZE = 60 + 1\n",
+ "\n",
+ "MAX_SIZE=[[0 for col in range(MAX_SIZE)]for row in range(MAX_SIZE)]\n",
+ "nChar=0\n",
+ "chArr=\"Hello\"\n",
+ "\n",
+ "print \"Please input a string( 60 characters max.): \",chArr\n",
+ "\n",
+ "nChar=len(chArr)+1\n",
+ "szStr=chArr\n",
+ "print \"required memory space for\",nChar,\n",
+ "print \"characters\"\n",
+ "chArr=szStr #string copy\n",
+ "szStr=chArr\n",
+ "print \"String copied in allocated space: \",szStr\n",
+ "print \"Memory space dellocated\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please input a string( 60 characters max.): Hello\n",
+ "required memory space for 6 characters\n",
+ "String copied in allocated space: Hello\n",
+ "Memory space dellocated\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.12, page no:236"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return self.__num,self.__denom\n",
+ "n=4\n",
+ "d=5\n",
+ "f=Fraction(4,5)\n",
+ "n,d=f.GetValue(n,d)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.13, page no:239"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " __sa=20 #initialising static member\n",
+ " a = None\n",
+ " def __init__(self):\n",
+ " self.a=None #public member\n",
+ " def f(self,b):\n",
+ " a=30\n",
+ " print \"Global a= \",b\n",
+ " print \"Local a= \",a\n",
+ " print \"Nonstatic member a= \",self.a\n",
+ " print \"static member sa= \",self.__sa\n",
+ "\n",
+ "a=10\n",
+ "\n",
+ "aXobj=X()\n",
+ "aXobj.a=40\n",
+ "aXobj.f(a)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Global a= 10\n",
+ "Local a= 30\n",
+ "Nonstatic member a= 40\n",
+ "static member sa= 20\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+}
\ No newline at end of file diff --git a/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_5.ipynb b/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_5.ipynb new file mode 100755 index 00000000..1083b19a --- /dev/null +++ b/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_5.ipynb @@ -0,0 +1,809 @@ +{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:dbbd8ed92141bcc804ff2fbeacf8bb85f122dc6e196e1d830291a4a449a3a439"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 8: Data Abstraction through Classes and User-Defined Data Types "
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.1, page no: 208"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Super:\n",
+ " def __init__(self):\n",
+ " self.__IntegerData=None #private member\n",
+ " #public functions\n",
+ " def SetData(self,i):\n",
+ " self.__IntegerData=i #refer to IntegerData\n",
+ " def ShowData(self):\n",
+ " print \"Data is \",self.__IntegerData,' '\n",
+ "\n",
+ "ob1=Super()\n",
+ "ob2=Super()\n",
+ "ob1.SetData(1000)\n",
+ "ob2.SetData(2000)\n",
+ "ob1.ShowData()\n",
+ "ob2.ShowData()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Data is 1000 \n",
+ "Data is 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.2, page no:211"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " def __init__(self):\n",
+ " self.a=None #private members\n",
+ " self.b=None #private members\n",
+ " \n",
+ "#no structure type present in python \n",
+ "x = X()\n",
+ "\n",
+ "x.a=0\n",
+ "x.b=1\n",
+ "print \"x.a=\",x.a,\",x.b=\",x.b"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "x.a= 0 ,x.b= 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.3, page no:214"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def SetValue(self,a,b): #public functions\n",
+ " self.__num=a \n",
+ " self.__denom=b \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 3 4\n",
+ "Numerator value set: 3\n",
+ "Denominator value set: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.4, page no:216"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " def __init__(self):\n",
+ " self.__i=None #private member\n",
+ " \n",
+ " def __init__(self):\n",
+ " self.__i=500 #constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__i=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__i\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "print \"s1 has data: \",s1.GetData()\n",
+ "print \"s2 has data: \",s2.GetData()\n",
+ "s1.SetData(1000) #function call\n",
+ "s2.SetData(2000)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \", s2.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500\n",
+ "s2 has data: 500\n",
+ "s1 has data: 1000 \n",
+ "s2 has data: 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.5, page no:217"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " __IntegerData=None\n",
+ " def __init__(self,data=None):\n",
+ " if data==None:\n",
+ " self.__IntegerData=500 #default constructor\n",
+ " else:\n",
+ " self.__IntegerData=data #parameterised constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__IntegerData=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__IntegerData\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "s3=SimpleClass(400)\n",
+ "s4=SimpleClass(600)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \",s2.GetData(),' '\n",
+ "print \"s3 has data: \",s3.GetData(),' '\n",
+ "print \"s4 has data: \",s4.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500 \n",
+ "s2 has data: 500 \n",
+ "s3 has data: 400 \n",
+ "s4 has data: 600 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.6, page no:218"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction: \n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " def __init__(self,a=0,b=1):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor\",' ',n\n",
+ " print \"Denominator set inside constructor\",' ',d\n",
+ " \n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " def GetValue(self,a,b):\n",
+ " a= self.__num\n",
+ " b= self.__denom\n",
+ " return a,b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter value of numerator and denominator: \",' ',n,d\n",
+ "f=Fraction(n,d)\n",
+ "f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter value of numerator and denominator: 3 4\n",
+ "Numerator set inside constructor 3\n",
+ "Denominator set inside constructor 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.7, page no:221"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor: \",self.__num\n",
+ " print \"Denominator set inside constructor: \",self.__denom \n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " return self.__num,self.__denom\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter the value of the numerator and denominator: \",n,d\n",
+ "f=Fraction(n,d)\n",
+ "n,d=f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "n=input(\"Please enter the value of numerator only: \")\n",
+ "f1=Fraction(n)\n",
+ "n,d=f1.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print 'ok..now I will create a fraction-no input please'\n",
+ "f2=Fraction()\n",
+ "n,d=f2.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of the numerator and denominator: 3 4\n",
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of numerator only: 3\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 1\n",
+ "ok..now I will create a fraction-no input please\n",
+ "Numerator set inside constructor: 0\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 0\n",
+ "Denominator value retrieved: 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.8, page no:223"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " \n",
+ " def __init__(self,anotherFraction=None): \n",
+ " if anotherFraction==None: #normal constructor\n",
+ " self.__num=anotherFraction\n",
+ " self.__denom=anotherFraction\n",
+ " else: #copy constructor\n",
+ " self.__num=anotherFraction.self.__num\n",
+ " self.__denom=anotherFraction.self.__denom\n",
+ " \n",
+ " \n",
+ " #public functions\n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b#refer to IntegerData\n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return a,b\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print \"Now a second clone copy is being created: \",''\n",
+ "f1=f\n",
+ "f1.GetValue(n,d)\n",
+ "print \"Clone's numerator value retrieved: \", ' ',n\n",
+ "print \"Clone's denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 5 6\n",
+ "Numerator value set: 5\n",
+ "Denominator value set: 6\n",
+ "Numerator value retrieved: 5\n",
+ "Denominator value retrieved: 6\n",
+ "Now a second clone copy is being created: \n",
+ "Clone's numerator value retrieved: 5\n",
+ "Clone's denominator value retrieved: 6\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.9, page no:229"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def MyNewHandler():\n",
+ " print \"Sorry operator new failed to allocate memory\"\n",
+ " exit(0)\n",
+ " \n",
+ "def _set_new_handler(s):\n",
+ " s()\n",
+ "#In python there is no in-built _set_new_handler function, so i made this function and passed MyNewHandler function as a parameters\n",
+ "_set_new_handler(MyNewHandler)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Sorry operator new failed to allocate memory\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.10, page no:230"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "from ctypes import * \n",
+ "class Fraction: \n",
+ " def __init__(self,a=0,b=1): \n",
+ " if isinstance(a,int): \n",
+ " c = c_int(a) \n",
+ " d = c_int(b) \n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d) \n",
+ " print 'constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " else:\n",
+ " c=c_int(a.__num[0])\n",
+ " d = c_int(a.__denom[0])\n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d)\n",
+ " print 'copy constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ " def __del__(self): \n",
+ " print 'destructor deallocates numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ "n = input(\"Please enter values of numerator: \") \n",
+ "d = input(\"Please enter values of denominator: \") \n",
+ "f = Fraction(n,d) \n",
+ "print 'Please enter another set of ' \n",
+ "n = input(\"numerator: \") \n",
+ "d = input(\"denominator: \") \n",
+ "print 'Creating fraction *pf : ' \n",
+ "pf = Fraction(n,d) \n",
+ "print 'Now a clone copy (f2) created from *pf: ' \n",
+ "f2 = Fraction(pf)\n",
+ "print 'Now another clone copy (*pf2) created from f:' \n",
+ "pf2 = Fraction(f) \n",
+ "print '*pf2 is being destroyed:' \n",
+ "del pf2\n",
+ "print '*pf is being destroyed:' \n",
+ "del pf \n",
+ "print 'now objects f2 and f automatically destroyed : '"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of numerator: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of denominator: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "constructor sets numerator = 3 , denominator = 4\n",
+ "Please enter another set of \n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "numerator: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "denominator: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Creating fraction *pf : \n",
+ "constructor sets numerator = 5 , denominator = 6\n",
+ "Now a clone copy (f2) created from *pf: \n",
+ "copy constructor sets numerator = 5 , denominator = 6\n",
+ "Now another clone copy (*pf2) created from f:\n",
+ "copy constructor sets numerator = 3 , denominator = 4\n",
+ "*pf2 is being destroyed:\n",
+ "*pf is being destroyed:\n",
+ "now objects f2 and f automatically destroyed : \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.11, page no:234"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def Memfail(self,s):\n",
+ " print \"Sorry Unable to allocate memory\"\n",
+ " sys.exit(0)\n",
+ "\n",
+ "MAX_SIZE = 60 + 1\n",
+ "\n",
+ "MAX_SIZE=[[0 for col in range(MAX_SIZE)]for row in range(MAX_SIZE)]\n",
+ "nChar=0\n",
+ "chArr=\"Hello\"\n",
+ "\n",
+ "print \"Please input a string( 60 characters max.): \",chArr\n",
+ "\n",
+ "nChar=len(chArr)+1\n",
+ "szStr=chArr\n",
+ "print \"required memory space for\",nChar,\n",
+ "print \"characters\"\n",
+ "chArr=szStr #string copy\n",
+ "szStr=chArr\n",
+ "print \"String copied in allocated space: \",szStr\n",
+ "print \"Memory space dellocated\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please input a string( 60 characters max.): Hello\n",
+ "required memory space for 6 characters\n",
+ "String copied in allocated space: Hello\n",
+ "Memory space dellocated\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.12, page no:236"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return self.__num,self.__denom\n",
+ "n=4\n",
+ "d=5\n",
+ "f=Fraction(4,5)\n",
+ "n,d=f.GetValue(n,d)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.13, page no:239"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " __sa=20 #initialising static member\n",
+ " a = None\n",
+ " def __init__(self):\n",
+ " self.a=None #public member\n",
+ " def f(self,b):\n",
+ " a=30\n",
+ " print \"Global a= \",b\n",
+ " print \"Local a= \",a\n",
+ " print \"Nonstatic member a= \",self.a\n",
+ " print \"static member sa= \",self.__sa\n",
+ "\n",
+ "a=10\n",
+ "\n",
+ "aXobj=X()\n",
+ "aXobj.a=40\n",
+ "aXobj.f(a)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Global a= 10\n",
+ "Local a= 30\n",
+ "Nonstatic member a= 40\n",
+ "static member sa= 20\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+}
\ No newline at end of file diff --git a/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_6.ipynb b/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_6.ipynb new file mode 100755 index 00000000..1083b19a --- /dev/null +++ b/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_6.ipynb @@ -0,0 +1,809 @@ +{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:dbbd8ed92141bcc804ff2fbeacf8bb85f122dc6e196e1d830291a4a449a3a439"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 8: Data Abstraction through Classes and User-Defined Data Types "
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.1, page no: 208"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Super:\n",
+ " def __init__(self):\n",
+ " self.__IntegerData=None #private member\n",
+ " #public functions\n",
+ " def SetData(self,i):\n",
+ " self.__IntegerData=i #refer to IntegerData\n",
+ " def ShowData(self):\n",
+ " print \"Data is \",self.__IntegerData,' '\n",
+ "\n",
+ "ob1=Super()\n",
+ "ob2=Super()\n",
+ "ob1.SetData(1000)\n",
+ "ob2.SetData(2000)\n",
+ "ob1.ShowData()\n",
+ "ob2.ShowData()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Data is 1000 \n",
+ "Data is 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.2, page no:211"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " def __init__(self):\n",
+ " self.a=None #private members\n",
+ " self.b=None #private members\n",
+ " \n",
+ "#no structure type present in python \n",
+ "x = X()\n",
+ "\n",
+ "x.a=0\n",
+ "x.b=1\n",
+ "print \"x.a=\",x.a,\",x.b=\",x.b"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "x.a= 0 ,x.b= 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.3, page no:214"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def SetValue(self,a,b): #public functions\n",
+ " self.__num=a \n",
+ " self.__denom=b \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 3 4\n",
+ "Numerator value set: 3\n",
+ "Denominator value set: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.4, page no:216"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " def __init__(self):\n",
+ " self.__i=None #private member\n",
+ " \n",
+ " def __init__(self):\n",
+ " self.__i=500 #constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__i=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__i\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "print \"s1 has data: \",s1.GetData()\n",
+ "print \"s2 has data: \",s2.GetData()\n",
+ "s1.SetData(1000) #function call\n",
+ "s2.SetData(2000)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \", s2.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500\n",
+ "s2 has data: 500\n",
+ "s1 has data: 1000 \n",
+ "s2 has data: 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.5, page no:217"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " __IntegerData=None\n",
+ " def __init__(self,data=None):\n",
+ " if data==None:\n",
+ " self.__IntegerData=500 #default constructor\n",
+ " else:\n",
+ " self.__IntegerData=data #parameterised constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__IntegerData=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__IntegerData\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "s3=SimpleClass(400)\n",
+ "s4=SimpleClass(600)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \",s2.GetData(),' '\n",
+ "print \"s3 has data: \",s3.GetData(),' '\n",
+ "print \"s4 has data: \",s4.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500 \n",
+ "s2 has data: 500 \n",
+ "s3 has data: 400 \n",
+ "s4 has data: 600 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.6, page no:218"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction: \n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " def __init__(self,a=0,b=1):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor\",' ',n\n",
+ " print \"Denominator set inside constructor\",' ',d\n",
+ " \n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " def GetValue(self,a,b):\n",
+ " a= self.__num\n",
+ " b= self.__denom\n",
+ " return a,b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter value of numerator and denominator: \",' ',n,d\n",
+ "f=Fraction(n,d)\n",
+ "f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter value of numerator and denominator: 3 4\n",
+ "Numerator set inside constructor 3\n",
+ "Denominator set inside constructor 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.7, page no:221"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor: \",self.__num\n",
+ " print \"Denominator set inside constructor: \",self.__denom \n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " return self.__num,self.__denom\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter the value of the numerator and denominator: \",n,d\n",
+ "f=Fraction(n,d)\n",
+ "n,d=f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "n=input(\"Please enter the value of numerator only: \")\n",
+ "f1=Fraction(n)\n",
+ "n,d=f1.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print 'ok..now I will create a fraction-no input please'\n",
+ "f2=Fraction()\n",
+ "n,d=f2.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of the numerator and denominator: 3 4\n",
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of numerator only: 3\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 1\n",
+ "ok..now I will create a fraction-no input please\n",
+ "Numerator set inside constructor: 0\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 0\n",
+ "Denominator value retrieved: 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.8, page no:223"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " \n",
+ " def __init__(self,anotherFraction=None): \n",
+ " if anotherFraction==None: #normal constructor\n",
+ " self.__num=anotherFraction\n",
+ " self.__denom=anotherFraction\n",
+ " else: #copy constructor\n",
+ " self.__num=anotherFraction.self.__num\n",
+ " self.__denom=anotherFraction.self.__denom\n",
+ " \n",
+ " \n",
+ " #public functions\n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b#refer to IntegerData\n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return a,b\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print \"Now a second clone copy is being created: \",''\n",
+ "f1=f\n",
+ "f1.GetValue(n,d)\n",
+ "print \"Clone's numerator value retrieved: \", ' ',n\n",
+ "print \"Clone's denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 5 6\n",
+ "Numerator value set: 5\n",
+ "Denominator value set: 6\n",
+ "Numerator value retrieved: 5\n",
+ "Denominator value retrieved: 6\n",
+ "Now a second clone copy is being created: \n",
+ "Clone's numerator value retrieved: 5\n",
+ "Clone's denominator value retrieved: 6\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.9, page no:229"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def MyNewHandler():\n",
+ " print \"Sorry operator new failed to allocate memory\"\n",
+ " exit(0)\n",
+ " \n",
+ "def _set_new_handler(s):\n",
+ " s()\n",
+ "#In python there is no in-built _set_new_handler function, so i made this function and passed MyNewHandler function as a parameters\n",
+ "_set_new_handler(MyNewHandler)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Sorry operator new failed to allocate memory\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.10, page no:230"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "from ctypes import * \n",
+ "class Fraction: \n",
+ " def __init__(self,a=0,b=1): \n",
+ " if isinstance(a,int): \n",
+ " c = c_int(a) \n",
+ " d = c_int(b) \n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d) \n",
+ " print 'constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " else:\n",
+ " c=c_int(a.__num[0])\n",
+ " d = c_int(a.__denom[0])\n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d)\n",
+ " print 'copy constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ " def __del__(self): \n",
+ " print 'destructor deallocates numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ "n = input(\"Please enter values of numerator: \") \n",
+ "d = input(\"Please enter values of denominator: \") \n",
+ "f = Fraction(n,d) \n",
+ "print 'Please enter another set of ' \n",
+ "n = input(\"numerator: \") \n",
+ "d = input(\"denominator: \") \n",
+ "print 'Creating fraction *pf : ' \n",
+ "pf = Fraction(n,d) \n",
+ "print 'Now a clone copy (f2) created from *pf: ' \n",
+ "f2 = Fraction(pf)\n",
+ "print 'Now another clone copy (*pf2) created from f:' \n",
+ "pf2 = Fraction(f) \n",
+ "print '*pf2 is being destroyed:' \n",
+ "del pf2\n",
+ "print '*pf is being destroyed:' \n",
+ "del pf \n",
+ "print 'now objects f2 and f automatically destroyed : '"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of numerator: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of denominator: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "constructor sets numerator = 3 , denominator = 4\n",
+ "Please enter another set of \n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "numerator: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "denominator: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Creating fraction *pf : \n",
+ "constructor sets numerator = 5 , denominator = 6\n",
+ "Now a clone copy (f2) created from *pf: \n",
+ "copy constructor sets numerator = 5 , denominator = 6\n",
+ "Now another clone copy (*pf2) created from f:\n",
+ "copy constructor sets numerator = 3 , denominator = 4\n",
+ "*pf2 is being destroyed:\n",
+ "*pf is being destroyed:\n",
+ "now objects f2 and f automatically destroyed : \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.11, page no:234"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def Memfail(self,s):\n",
+ " print \"Sorry Unable to allocate memory\"\n",
+ " sys.exit(0)\n",
+ "\n",
+ "MAX_SIZE = 60 + 1\n",
+ "\n",
+ "MAX_SIZE=[[0 for col in range(MAX_SIZE)]for row in range(MAX_SIZE)]\n",
+ "nChar=0\n",
+ "chArr=\"Hello\"\n",
+ "\n",
+ "print \"Please input a string( 60 characters max.): \",chArr\n",
+ "\n",
+ "nChar=len(chArr)+1\n",
+ "szStr=chArr\n",
+ "print \"required memory space for\",nChar,\n",
+ "print \"characters\"\n",
+ "chArr=szStr #string copy\n",
+ "szStr=chArr\n",
+ "print \"String copied in allocated space: \",szStr\n",
+ "print \"Memory space dellocated\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please input a string( 60 characters max.): Hello\n",
+ "required memory space for 6 characters\n",
+ "String copied in allocated space: Hello\n",
+ "Memory space dellocated\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.12, page no:236"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return self.__num,self.__denom\n",
+ "n=4\n",
+ "d=5\n",
+ "f=Fraction(4,5)\n",
+ "n,d=f.GetValue(n,d)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.13, page no:239"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " __sa=20 #initialising static member\n",
+ " a = None\n",
+ " def __init__(self):\n",
+ " self.a=None #public member\n",
+ " def f(self,b):\n",
+ " a=30\n",
+ " print \"Global a= \",b\n",
+ " print \"Local a= \",a\n",
+ " print \"Nonstatic member a= \",self.a\n",
+ " print \"static member sa= \",self.__sa\n",
+ "\n",
+ "a=10\n",
+ "\n",
+ "aXobj=X()\n",
+ "aXobj.a=40\n",
+ "aXobj.f(a)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Global a= 10\n",
+ "Local a= 30\n",
+ "Nonstatic member a= 40\n",
+ "static member sa= 20\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+}
\ No newline at end of file diff --git a/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_7.ipynb b/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_7.ipynb new file mode 100755 index 00000000..1083b19a --- /dev/null +++ b/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_7.ipynb @@ -0,0 +1,809 @@ +{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:dbbd8ed92141bcc804ff2fbeacf8bb85f122dc6e196e1d830291a4a449a3a439"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 8: Data Abstraction through Classes and User-Defined Data Types "
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.1, page no: 208"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Super:\n",
+ " def __init__(self):\n",
+ " self.__IntegerData=None #private member\n",
+ " #public functions\n",
+ " def SetData(self,i):\n",
+ " self.__IntegerData=i #refer to IntegerData\n",
+ " def ShowData(self):\n",
+ " print \"Data is \",self.__IntegerData,' '\n",
+ "\n",
+ "ob1=Super()\n",
+ "ob2=Super()\n",
+ "ob1.SetData(1000)\n",
+ "ob2.SetData(2000)\n",
+ "ob1.ShowData()\n",
+ "ob2.ShowData()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Data is 1000 \n",
+ "Data is 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.2, page no:211"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " def __init__(self):\n",
+ " self.a=None #private members\n",
+ " self.b=None #private members\n",
+ " \n",
+ "#no structure type present in python \n",
+ "x = X()\n",
+ "\n",
+ "x.a=0\n",
+ "x.b=1\n",
+ "print \"x.a=\",x.a,\",x.b=\",x.b"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "x.a= 0 ,x.b= 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.3, page no:214"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def SetValue(self,a,b): #public functions\n",
+ " self.__num=a \n",
+ " self.__denom=b \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 3 4\n",
+ "Numerator value set: 3\n",
+ "Denominator value set: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.4, page no:216"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " def __init__(self):\n",
+ " self.__i=None #private member\n",
+ " \n",
+ " def __init__(self):\n",
+ " self.__i=500 #constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__i=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__i\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "print \"s1 has data: \",s1.GetData()\n",
+ "print \"s2 has data: \",s2.GetData()\n",
+ "s1.SetData(1000) #function call\n",
+ "s2.SetData(2000)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \", s2.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500\n",
+ "s2 has data: 500\n",
+ "s1 has data: 1000 \n",
+ "s2 has data: 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.5, page no:217"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " __IntegerData=None\n",
+ " def __init__(self,data=None):\n",
+ " if data==None:\n",
+ " self.__IntegerData=500 #default constructor\n",
+ " else:\n",
+ " self.__IntegerData=data #parameterised constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__IntegerData=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__IntegerData\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "s3=SimpleClass(400)\n",
+ "s4=SimpleClass(600)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \",s2.GetData(),' '\n",
+ "print \"s3 has data: \",s3.GetData(),' '\n",
+ "print \"s4 has data: \",s4.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500 \n",
+ "s2 has data: 500 \n",
+ "s3 has data: 400 \n",
+ "s4 has data: 600 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.6, page no:218"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction: \n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " def __init__(self,a=0,b=1):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor\",' ',n\n",
+ " print \"Denominator set inside constructor\",' ',d\n",
+ " \n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " def GetValue(self,a,b):\n",
+ " a= self.__num\n",
+ " b= self.__denom\n",
+ " return a,b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter value of numerator and denominator: \",' ',n,d\n",
+ "f=Fraction(n,d)\n",
+ "f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter value of numerator and denominator: 3 4\n",
+ "Numerator set inside constructor 3\n",
+ "Denominator set inside constructor 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.7, page no:221"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor: \",self.__num\n",
+ " print \"Denominator set inside constructor: \",self.__denom \n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " return self.__num,self.__denom\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter the value of the numerator and denominator: \",n,d\n",
+ "f=Fraction(n,d)\n",
+ "n,d=f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "n=input(\"Please enter the value of numerator only: \")\n",
+ "f1=Fraction(n)\n",
+ "n,d=f1.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print 'ok..now I will create a fraction-no input please'\n",
+ "f2=Fraction()\n",
+ "n,d=f2.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of the numerator and denominator: 3 4\n",
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of numerator only: 3\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 1\n",
+ "ok..now I will create a fraction-no input please\n",
+ "Numerator set inside constructor: 0\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 0\n",
+ "Denominator value retrieved: 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.8, page no:223"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " \n",
+ " def __init__(self,anotherFraction=None): \n",
+ " if anotherFraction==None: #normal constructor\n",
+ " self.__num=anotherFraction\n",
+ " self.__denom=anotherFraction\n",
+ " else: #copy constructor\n",
+ " self.__num=anotherFraction.self.__num\n",
+ " self.__denom=anotherFraction.self.__denom\n",
+ " \n",
+ " \n",
+ " #public functions\n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b#refer to IntegerData\n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return a,b\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print \"Now a second clone copy is being created: \",''\n",
+ "f1=f\n",
+ "f1.GetValue(n,d)\n",
+ "print \"Clone's numerator value retrieved: \", ' ',n\n",
+ "print \"Clone's denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 5 6\n",
+ "Numerator value set: 5\n",
+ "Denominator value set: 6\n",
+ "Numerator value retrieved: 5\n",
+ "Denominator value retrieved: 6\n",
+ "Now a second clone copy is being created: \n",
+ "Clone's numerator value retrieved: 5\n",
+ "Clone's denominator value retrieved: 6\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.9, page no:229"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def MyNewHandler():\n",
+ " print \"Sorry operator new failed to allocate memory\"\n",
+ " exit(0)\n",
+ " \n",
+ "def _set_new_handler(s):\n",
+ " s()\n",
+ "#In python there is no in-built _set_new_handler function, so i made this function and passed MyNewHandler function as a parameters\n",
+ "_set_new_handler(MyNewHandler)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Sorry operator new failed to allocate memory\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.10, page no:230"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "from ctypes import * \n",
+ "class Fraction: \n",
+ " def __init__(self,a=0,b=1): \n",
+ " if isinstance(a,int): \n",
+ " c = c_int(a) \n",
+ " d = c_int(b) \n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d) \n",
+ " print 'constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " else:\n",
+ " c=c_int(a.__num[0])\n",
+ " d = c_int(a.__denom[0])\n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d)\n",
+ " print 'copy constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ " def __del__(self): \n",
+ " print 'destructor deallocates numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ "n = input(\"Please enter values of numerator: \") \n",
+ "d = input(\"Please enter values of denominator: \") \n",
+ "f = Fraction(n,d) \n",
+ "print 'Please enter another set of ' \n",
+ "n = input(\"numerator: \") \n",
+ "d = input(\"denominator: \") \n",
+ "print 'Creating fraction *pf : ' \n",
+ "pf = Fraction(n,d) \n",
+ "print 'Now a clone copy (f2) created from *pf: ' \n",
+ "f2 = Fraction(pf)\n",
+ "print 'Now another clone copy (*pf2) created from f:' \n",
+ "pf2 = Fraction(f) \n",
+ "print '*pf2 is being destroyed:' \n",
+ "del pf2\n",
+ "print '*pf is being destroyed:' \n",
+ "del pf \n",
+ "print 'now objects f2 and f automatically destroyed : '"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of numerator: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of denominator: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "constructor sets numerator = 3 , denominator = 4\n",
+ "Please enter another set of \n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "numerator: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "denominator: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Creating fraction *pf : \n",
+ "constructor sets numerator = 5 , denominator = 6\n",
+ "Now a clone copy (f2) created from *pf: \n",
+ "copy constructor sets numerator = 5 , denominator = 6\n",
+ "Now another clone copy (*pf2) created from f:\n",
+ "copy constructor sets numerator = 3 , denominator = 4\n",
+ "*pf2 is being destroyed:\n",
+ "*pf is being destroyed:\n",
+ "now objects f2 and f automatically destroyed : \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.11, page no:234"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def Memfail(self,s):\n",
+ " print \"Sorry Unable to allocate memory\"\n",
+ " sys.exit(0)\n",
+ "\n",
+ "MAX_SIZE = 60 + 1\n",
+ "\n",
+ "MAX_SIZE=[[0 for col in range(MAX_SIZE)]for row in range(MAX_SIZE)]\n",
+ "nChar=0\n",
+ "chArr=\"Hello\"\n",
+ "\n",
+ "print \"Please input a string( 60 characters max.): \",chArr\n",
+ "\n",
+ "nChar=len(chArr)+1\n",
+ "szStr=chArr\n",
+ "print \"required memory space for\",nChar,\n",
+ "print \"characters\"\n",
+ "chArr=szStr #string copy\n",
+ "szStr=chArr\n",
+ "print \"String copied in allocated space: \",szStr\n",
+ "print \"Memory space dellocated\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please input a string( 60 characters max.): Hello\n",
+ "required memory space for 6 characters\n",
+ "String copied in allocated space: Hello\n",
+ "Memory space dellocated\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.12, page no:236"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return self.__num,self.__denom\n",
+ "n=4\n",
+ "d=5\n",
+ "f=Fraction(4,5)\n",
+ "n,d=f.GetValue(n,d)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.13, page no:239"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " __sa=20 #initialising static member\n",
+ " a = None\n",
+ " def __init__(self):\n",
+ " self.a=None #public member\n",
+ " def f(self,b):\n",
+ " a=30\n",
+ " print \"Global a= \",b\n",
+ " print \"Local a= \",a\n",
+ " print \"Nonstatic member a= \",self.a\n",
+ " print \"static member sa= \",self.__sa\n",
+ "\n",
+ "a=10\n",
+ "\n",
+ "aXobj=X()\n",
+ "aXobj.a=40\n",
+ "aXobj.f(a)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Global a= 10\n",
+ "Local a= 30\n",
+ "Nonstatic member a= 40\n",
+ "static member sa= 20\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+}
\ No newline at end of file diff --git a/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_8.ipynb b/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_8.ipynb new file mode 100755 index 00000000..1083b19a --- /dev/null +++ b/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_8.ipynb @@ -0,0 +1,809 @@ +{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:dbbd8ed92141bcc804ff2fbeacf8bb85f122dc6e196e1d830291a4a449a3a439"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 8: Data Abstraction through Classes and User-Defined Data Types "
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.1, page no: 208"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Super:\n",
+ " def __init__(self):\n",
+ " self.__IntegerData=None #private member\n",
+ " #public functions\n",
+ " def SetData(self,i):\n",
+ " self.__IntegerData=i #refer to IntegerData\n",
+ " def ShowData(self):\n",
+ " print \"Data is \",self.__IntegerData,' '\n",
+ "\n",
+ "ob1=Super()\n",
+ "ob2=Super()\n",
+ "ob1.SetData(1000)\n",
+ "ob2.SetData(2000)\n",
+ "ob1.ShowData()\n",
+ "ob2.ShowData()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Data is 1000 \n",
+ "Data is 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.2, page no:211"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " def __init__(self):\n",
+ " self.a=None #private members\n",
+ " self.b=None #private members\n",
+ " \n",
+ "#no structure type present in python \n",
+ "x = X()\n",
+ "\n",
+ "x.a=0\n",
+ "x.b=1\n",
+ "print \"x.a=\",x.a,\",x.b=\",x.b"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "x.a= 0 ,x.b= 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.3, page no:214"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def SetValue(self,a,b): #public functions\n",
+ " self.__num=a \n",
+ " self.__denom=b \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 3 4\n",
+ "Numerator value set: 3\n",
+ "Denominator value set: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.4, page no:216"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " def __init__(self):\n",
+ " self.__i=None #private member\n",
+ " \n",
+ " def __init__(self):\n",
+ " self.__i=500 #constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__i=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__i\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "print \"s1 has data: \",s1.GetData()\n",
+ "print \"s2 has data: \",s2.GetData()\n",
+ "s1.SetData(1000) #function call\n",
+ "s2.SetData(2000)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \", s2.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500\n",
+ "s2 has data: 500\n",
+ "s1 has data: 1000 \n",
+ "s2 has data: 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.5, page no:217"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " __IntegerData=None\n",
+ " def __init__(self,data=None):\n",
+ " if data==None:\n",
+ " self.__IntegerData=500 #default constructor\n",
+ " else:\n",
+ " self.__IntegerData=data #parameterised constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__IntegerData=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__IntegerData\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "s3=SimpleClass(400)\n",
+ "s4=SimpleClass(600)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \",s2.GetData(),' '\n",
+ "print \"s3 has data: \",s3.GetData(),' '\n",
+ "print \"s4 has data: \",s4.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500 \n",
+ "s2 has data: 500 \n",
+ "s3 has data: 400 \n",
+ "s4 has data: 600 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.6, page no:218"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction: \n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " def __init__(self,a=0,b=1):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor\",' ',n\n",
+ " print \"Denominator set inside constructor\",' ',d\n",
+ " \n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " def GetValue(self,a,b):\n",
+ " a= self.__num\n",
+ " b= self.__denom\n",
+ " return a,b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter value of numerator and denominator: \",' ',n,d\n",
+ "f=Fraction(n,d)\n",
+ "f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter value of numerator and denominator: 3 4\n",
+ "Numerator set inside constructor 3\n",
+ "Denominator set inside constructor 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.7, page no:221"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor: \",self.__num\n",
+ " print \"Denominator set inside constructor: \",self.__denom \n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " return self.__num,self.__denom\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter the value of the numerator and denominator: \",n,d\n",
+ "f=Fraction(n,d)\n",
+ "n,d=f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "n=input(\"Please enter the value of numerator only: \")\n",
+ "f1=Fraction(n)\n",
+ "n,d=f1.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print 'ok..now I will create a fraction-no input please'\n",
+ "f2=Fraction()\n",
+ "n,d=f2.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of the numerator and denominator: 3 4\n",
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of numerator only: 3\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 1\n",
+ "ok..now I will create a fraction-no input please\n",
+ "Numerator set inside constructor: 0\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 0\n",
+ "Denominator value retrieved: 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.8, page no:223"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " \n",
+ " def __init__(self,anotherFraction=None): \n",
+ " if anotherFraction==None: #normal constructor\n",
+ " self.__num=anotherFraction\n",
+ " self.__denom=anotherFraction\n",
+ " else: #copy constructor\n",
+ " self.__num=anotherFraction.self.__num\n",
+ " self.__denom=anotherFraction.self.__denom\n",
+ " \n",
+ " \n",
+ " #public functions\n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b#refer to IntegerData\n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return a,b\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print \"Now a second clone copy is being created: \",''\n",
+ "f1=f\n",
+ "f1.GetValue(n,d)\n",
+ "print \"Clone's numerator value retrieved: \", ' ',n\n",
+ "print \"Clone's denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 5 6\n",
+ "Numerator value set: 5\n",
+ "Denominator value set: 6\n",
+ "Numerator value retrieved: 5\n",
+ "Denominator value retrieved: 6\n",
+ "Now a second clone copy is being created: \n",
+ "Clone's numerator value retrieved: 5\n",
+ "Clone's denominator value retrieved: 6\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.9, page no:229"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def MyNewHandler():\n",
+ " print \"Sorry operator new failed to allocate memory\"\n",
+ " exit(0)\n",
+ " \n",
+ "def _set_new_handler(s):\n",
+ " s()\n",
+ "#In python there is no in-built _set_new_handler function, so i made this function and passed MyNewHandler function as a parameters\n",
+ "_set_new_handler(MyNewHandler)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Sorry operator new failed to allocate memory\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.10, page no:230"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "from ctypes import * \n",
+ "class Fraction: \n",
+ " def __init__(self,a=0,b=1): \n",
+ " if isinstance(a,int): \n",
+ " c = c_int(a) \n",
+ " d = c_int(b) \n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d) \n",
+ " print 'constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " else:\n",
+ " c=c_int(a.__num[0])\n",
+ " d = c_int(a.__denom[0])\n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d)\n",
+ " print 'copy constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ " def __del__(self): \n",
+ " print 'destructor deallocates numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ "n = input(\"Please enter values of numerator: \") \n",
+ "d = input(\"Please enter values of denominator: \") \n",
+ "f = Fraction(n,d) \n",
+ "print 'Please enter another set of ' \n",
+ "n = input(\"numerator: \") \n",
+ "d = input(\"denominator: \") \n",
+ "print 'Creating fraction *pf : ' \n",
+ "pf = Fraction(n,d) \n",
+ "print 'Now a clone copy (f2) created from *pf: ' \n",
+ "f2 = Fraction(pf)\n",
+ "print 'Now another clone copy (*pf2) created from f:' \n",
+ "pf2 = Fraction(f) \n",
+ "print '*pf2 is being destroyed:' \n",
+ "del pf2\n",
+ "print '*pf is being destroyed:' \n",
+ "del pf \n",
+ "print 'now objects f2 and f automatically destroyed : '"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of numerator: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of denominator: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "constructor sets numerator = 3 , denominator = 4\n",
+ "Please enter another set of \n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "numerator: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "denominator: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Creating fraction *pf : \n",
+ "constructor sets numerator = 5 , denominator = 6\n",
+ "Now a clone copy (f2) created from *pf: \n",
+ "copy constructor sets numerator = 5 , denominator = 6\n",
+ "Now another clone copy (*pf2) created from f:\n",
+ "copy constructor sets numerator = 3 , denominator = 4\n",
+ "*pf2 is being destroyed:\n",
+ "*pf is being destroyed:\n",
+ "now objects f2 and f automatically destroyed : \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.11, page no:234"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def Memfail(self,s):\n",
+ " print \"Sorry Unable to allocate memory\"\n",
+ " sys.exit(0)\n",
+ "\n",
+ "MAX_SIZE = 60 + 1\n",
+ "\n",
+ "MAX_SIZE=[[0 for col in range(MAX_SIZE)]for row in range(MAX_SIZE)]\n",
+ "nChar=0\n",
+ "chArr=\"Hello\"\n",
+ "\n",
+ "print \"Please input a string( 60 characters max.): \",chArr\n",
+ "\n",
+ "nChar=len(chArr)+1\n",
+ "szStr=chArr\n",
+ "print \"required memory space for\",nChar,\n",
+ "print \"characters\"\n",
+ "chArr=szStr #string copy\n",
+ "szStr=chArr\n",
+ "print \"String copied in allocated space: \",szStr\n",
+ "print \"Memory space dellocated\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please input a string( 60 characters max.): Hello\n",
+ "required memory space for 6 characters\n",
+ "String copied in allocated space: Hello\n",
+ "Memory space dellocated\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.12, page no:236"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return self.__num,self.__denom\n",
+ "n=4\n",
+ "d=5\n",
+ "f=Fraction(4,5)\n",
+ "n,d=f.GetValue(n,d)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.13, page no:239"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " __sa=20 #initialising static member\n",
+ " a = None\n",
+ " def __init__(self):\n",
+ " self.a=None #public member\n",
+ " def f(self,b):\n",
+ " a=30\n",
+ " print \"Global a= \",b\n",
+ " print \"Local a= \",a\n",
+ " print \"Nonstatic member a= \",self.a\n",
+ " print \"static member sa= \",self.__sa\n",
+ "\n",
+ "a=10\n",
+ "\n",
+ "aXobj=X()\n",
+ "aXobj.a=40\n",
+ "aXobj.f(a)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Global a= 10\n",
+ "Local a= 30\n",
+ "Nonstatic member a= 40\n",
+ "static member sa= 20\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+}
\ No newline at end of file diff --git a/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_9.ipynb b/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_9.ipynb new file mode 100755 index 00000000..1083b19a --- /dev/null +++ b/sample_notebooks/NitamoniDas/chapter_8_Data_Abstraction_through_Classes_and_User-Defined_Data_Types_9.ipynb @@ -0,0 +1,809 @@ +{
+ "metadata": {
+ "name": "",
+ "signature": "sha256:dbbd8ed92141bcc804ff2fbeacf8bb85f122dc6e196e1d830291a4a449a3a439"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+ {
+ "cells": [
+ {
+ "cell_type": "heading",
+ "level": 1,
+ "metadata": {},
+ "source": [
+ "Chapter 8: Data Abstraction through Classes and User-Defined Data Types "
+ ]
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.1, page no: 208"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Super:\n",
+ " def __init__(self):\n",
+ " self.__IntegerData=None #private member\n",
+ " #public functions\n",
+ " def SetData(self,i):\n",
+ " self.__IntegerData=i #refer to IntegerData\n",
+ " def ShowData(self):\n",
+ " print \"Data is \",self.__IntegerData,' '\n",
+ "\n",
+ "ob1=Super()\n",
+ "ob2=Super()\n",
+ "ob1.SetData(1000)\n",
+ "ob2.SetData(2000)\n",
+ "ob1.ShowData()\n",
+ "ob2.ShowData()"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Data is 1000 \n",
+ "Data is 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.2, page no:211"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " def __init__(self):\n",
+ " self.a=None #private members\n",
+ " self.b=None #private members\n",
+ " \n",
+ "#no structure type present in python \n",
+ "x = X()\n",
+ "\n",
+ "x.a=0\n",
+ "x.b=1\n",
+ "print \"x.a=\",x.a,\",x.b=\",x.b"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "x.a= 0 ,x.b= 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.3, page no:214"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def SetValue(self,a,b): #public functions\n",
+ " self.__num=a \n",
+ " self.__denom=b \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 3 4\n",
+ "Numerator value set: 3\n",
+ "Denominator value set: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.4, page no:216"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " def __init__(self):\n",
+ " self.__i=None #private member\n",
+ " \n",
+ " def __init__(self):\n",
+ " self.__i=500 #constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__i=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__i\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "print \"s1 has data: \",s1.GetData()\n",
+ "print \"s2 has data: \",s2.GetData()\n",
+ "s1.SetData(1000) #function call\n",
+ "s2.SetData(2000)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \", s2.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500\n",
+ "s2 has data: 500\n",
+ "s1 has data: 1000 \n",
+ "s2 has data: 2000 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.5, page no:217"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class SimpleClass:\n",
+ " __IntegerData=None\n",
+ " def __init__(self,data=None):\n",
+ " if data==None:\n",
+ " self.__IntegerData=500 #default constructor\n",
+ " else:\n",
+ " self.__IntegerData=data #parameterised constructor\n",
+ " \n",
+ " def SetData(self,d):\n",
+ " self.__IntegerData=d\n",
+ " \n",
+ " def GetData(self):\n",
+ " return self.__IntegerData\n",
+ " \n",
+ "#Initializing\n",
+ "s1=SimpleClass()\n",
+ "s2=SimpleClass()\n",
+ "s3=SimpleClass(400)\n",
+ "s4=SimpleClass(600)\n",
+ "print \"s1 has data: \",s1.GetData(),' '\n",
+ "print \"s2 has data: \",s2.GetData(),' '\n",
+ "print \"s3 has data: \",s3.GetData(),' '\n",
+ "print \"s4 has data: \",s4.GetData(),' '\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "s1 has data: 500 \n",
+ "s2 has data: 500 \n",
+ "s3 has data: 400 \n",
+ "s4 has data: 600 \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.6, page no:218"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction: \n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " def __init__(self,a=0,b=1):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor\",' ',n\n",
+ " print \"Denominator set inside constructor\",' ',d\n",
+ " \n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " def GetValue(self,a,b):\n",
+ " a= self.__num\n",
+ " b= self.__denom\n",
+ " return a,b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter value of numerator and denominator: \",' ',n,d\n",
+ "f=Fraction(n,d)\n",
+ "f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter value of numerator and denominator: 3 4\n",
+ "Numerator set inside constructor 3\n",
+ "Denominator set inside constructor 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.7, page no:221"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " print \"Numerator set inside constructor: \",self.__num\n",
+ " print \"Denominator set inside constructor: \",self.__denom \n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " return self.__num,self.__denom\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"Please enter the value of the numerator and denominator: \",n,d\n",
+ "f=Fraction(n,d)\n",
+ "n,d=f.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "n=input(\"Please enter the value of numerator only: \")\n",
+ "f1=Fraction(n)\n",
+ "n,d=f1.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print 'ok..now I will create a fraction-no input please'\n",
+ "f2=Fraction()\n",
+ "n,d=f2.GetValue(n,d)\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of the numerator and denominator: 3 4\n",
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 4\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 4\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter the value of numerator only: 3\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Numerator set inside constructor: 3\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 3\n",
+ "Denominator value retrieved: 1\n",
+ "ok..now I will create a fraction-no input please\n",
+ "Numerator set inside constructor: 0\n",
+ "Denominator set inside constructor: 1\n",
+ "Numerator value retrieved: 0\n",
+ "Denominator value retrieved: 1\n"
+ ]
+ }
+ ],
+ "prompt_number": 3
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.8, page no:223"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " def_init_num=None #private members\n",
+ " def_init_denom=None #private members\n",
+ " \n",
+ " def __init__(self,anotherFraction=None): \n",
+ " if anotherFraction==None: #normal constructor\n",
+ " self.__num=anotherFraction\n",
+ " self.__denom=anotherFraction\n",
+ " else: #copy constructor\n",
+ " self.__num=anotherFraction.self.__num\n",
+ " self.__denom=anotherFraction.self.__denom\n",
+ " \n",
+ " \n",
+ " #public functions\n",
+ " def SetValue(self,a,b):\n",
+ " self.__num=a\n",
+ " self.__denom=b#refer to IntegerData\n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return a,b\n",
+ " \n",
+ "f=Fraction()\n",
+ "n=input(\"Enter n: \") #user input\n",
+ "d=input(\"Enter d: \") #user input\n",
+ "print \"enter the numerator and denominator: \", ' ',n,d\n",
+ "\n",
+ "f.SetValue(n,d) #call function SetValue\n",
+ "print \"Numerator value set: \", ' ',n\n",
+ "print \"Denominator value set: \", ' ',d\n",
+ "f.GetValue(n,d) #call function GetData\n",
+ "print \"Numerator value retrieved: \", ' ',n\n",
+ "print \"Denominator value retrieved: \", ' ',d\n",
+ "print \"Now a second clone copy is being created: \",''\n",
+ "f1=f\n",
+ "f1.GetValue(n,d)\n",
+ "print \"Clone's numerator value retrieved: \", ' ',n\n",
+ "print \"Clone's denominator value retrieved: \", ' ',d"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter n: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Enter d: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "enter the numerator and denominator: 5 6\n",
+ "Numerator value set: 5\n",
+ "Denominator value set: 6\n",
+ "Numerator value retrieved: 5\n",
+ "Denominator value retrieved: 6\n",
+ "Now a second clone copy is being created: \n",
+ "Clone's numerator value retrieved: 5\n",
+ "Clone's denominator value retrieved: 6\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.9, page no:229"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def MyNewHandler():\n",
+ " print \"Sorry operator new failed to allocate memory\"\n",
+ " exit(0)\n",
+ " \n",
+ "def _set_new_handler(s):\n",
+ " s()\n",
+ "#In python there is no in-built _set_new_handler function, so i made this function and passed MyNewHandler function as a parameters\n",
+ "_set_new_handler(MyNewHandler)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Sorry operator new failed to allocate memory\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.10, page no:230"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "from ctypes import * \n",
+ "class Fraction: \n",
+ " def __init__(self,a=0,b=1): \n",
+ " if isinstance(a,int): \n",
+ " c = c_int(a) \n",
+ " d = c_int(b) \n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d) \n",
+ " print 'constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " else:\n",
+ " c=c_int(a.__num[0])\n",
+ " d = c_int(a.__denom[0])\n",
+ " self.__num = pointer(c) \n",
+ " self.__denom = pointer(d)\n",
+ " print 'copy constructor sets numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ " def __del__(self): \n",
+ " print 'destructor deallocates numerator = ', self.__num[0] , ', denominator = ', self.__denom[0] \n",
+ " \n",
+ "n = input(\"Please enter values of numerator: \") \n",
+ "d = input(\"Please enter values of denominator: \") \n",
+ "f = Fraction(n,d) \n",
+ "print 'Please enter another set of ' \n",
+ "n = input(\"numerator: \") \n",
+ "d = input(\"denominator: \") \n",
+ "print 'Creating fraction *pf : ' \n",
+ "pf = Fraction(n,d) \n",
+ "print 'Now a clone copy (f2) created from *pf: ' \n",
+ "f2 = Fraction(pf)\n",
+ "print 'Now another clone copy (*pf2) created from f:' \n",
+ "pf2 = Fraction(f) \n",
+ "print '*pf2 is being destroyed:' \n",
+ "del pf2\n",
+ "print '*pf is being destroyed:' \n",
+ "del pf \n",
+ "print 'now objects f2 and f automatically destroyed : '"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of numerator: 3\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please enter values of denominator: 4\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "constructor sets numerator = 3 , denominator = 4\n",
+ "Please enter another set of \n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "numerator: 5\n"
+ ]
+ },
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "denominator: 6\n"
+ ]
+ },
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Creating fraction *pf : \n",
+ "constructor sets numerator = 5 , denominator = 6\n",
+ "Now a clone copy (f2) created from *pf: \n",
+ "copy constructor sets numerator = 5 , denominator = 6\n",
+ "Now another clone copy (*pf2) created from f:\n",
+ "copy constructor sets numerator = 3 , denominator = 4\n",
+ "*pf2 is being destroyed:\n",
+ "*pf is being destroyed:\n",
+ "now objects f2 and f automatically destroyed : \n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.11, page no:234"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "def Memfail(self,s):\n",
+ " print \"Sorry Unable to allocate memory\"\n",
+ " sys.exit(0)\n",
+ "\n",
+ "MAX_SIZE = 60 + 1\n",
+ "\n",
+ "MAX_SIZE=[[0 for col in range(MAX_SIZE)]for row in range(MAX_SIZE)]\n",
+ "nChar=0\n",
+ "chArr=\"Hello\"\n",
+ "\n",
+ "print \"Please input a string( 60 characters max.): \",chArr\n",
+ "\n",
+ "nChar=len(chArr)+1\n",
+ "szStr=chArr\n",
+ "print \"required memory space for\",nChar,\n",
+ "print \"characters\"\n",
+ "chArr=szStr #string copy\n",
+ "szStr=chArr\n",
+ "print \"String copied in allocated space: \",szStr\n",
+ "print \"Memory space dellocated\"\n"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Please input a string( 60 characters max.): Hello\n",
+ "required memory space for 6 characters\n",
+ "String copied in allocated space: Hello\n",
+ "Memory space dellocated\n"
+ ]
+ }
+ ],
+ "prompt_number": 4
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.12, page no:236"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class Fraction:\n",
+ " \n",
+ " def __init__(self,a=0,b=1): #constructor\n",
+ " self.__num=a\n",
+ " self.__denom=b\n",
+ " \n",
+ " def __del__(self): #destructor\n",
+ " pass\n",
+ " \n",
+ " def GetValue(self,a,b):\n",
+ " a=self.__num\n",
+ " b=self.__denom\n",
+ " return self.__num,self.__denom\n",
+ "n=4\n",
+ "d=5\n",
+ "f=Fraction(4,5)\n",
+ "n,d=f.GetValue(n,d)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [],
+ "prompt_number": 2
+ },
+ {
+ "cell_type": "heading",
+ "level": 2,
+ "metadata": {},
+ "source": [
+ "Program Source Code 8.13, page no:239"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [
+ "class X:\n",
+ " __sa=20 #initialising static member\n",
+ " a = None\n",
+ " def __init__(self):\n",
+ " self.a=None #public member\n",
+ " def f(self,b):\n",
+ " a=30\n",
+ " print \"Global a= \",b\n",
+ " print \"Local a= \",a\n",
+ " print \"Nonstatic member a= \",self.a\n",
+ " print \"static member sa= \",self.__sa\n",
+ "\n",
+ "a=10\n",
+ "\n",
+ "aXobj=X()\n",
+ "aXobj.a=40\n",
+ "aXobj.f(a)"
+ ],
+ "language": "python",
+ "metadata": {},
+ "outputs": [
+ {
+ "output_type": "stream",
+ "stream": "stdout",
+ "text": [
+ "Global a= 10\n",
+ "Local a= 30\n",
+ "Nonstatic member a= 40\n",
+ "static member sa= 20\n"
+ ]
+ }
+ ],
+ "prompt_number": 1
+ },
+ {
+ "cell_type": "code",
+ "collapsed": false,
+ "input": [],
+ "language": "python",
+ "metadata": {},
+ "outputs": []
+ }
+ ],
+ "metadata": {}
+ }
+ ]
+}
\ No newline at end of file |