Page 38
pi = 0
k = 1
while True:
pi += 4 * (-1)**(k+1) * 1 / (2*k-1)
k = k+1
print(k, pi)
import fractions
pi = 0
k = 1
while True:
pi += 4*(-1)**(k+1)*fractions.Fraction(1, 2*k-1)
k = k+1
print(k, pi, float(pi))
Page 49
import random
def myFunction(param1 = random.random()):
print(param1)
myFunction()
myFunction()
import random
def myFunction(param1 = None):
param1 = param1 or random.random()
print(param1)
myFunction()
myFunction()
Page 64
import datetime
import zoneinfo
dt1 = datetime.datetime(2022, 1, 14, 10, 50, tzinfo=zoneinfo.ZoneInfo("Europe/Madrid"))
dt2 = datetime.datetime(2022, 1, 14, 10, 50, tzinfo=zoneinfo.ZoneInfo("utc"))
print(dt1.timestamp())
print(dt2.timestamp())
import datetime
import zoneinfo
dt1 = datetime.datetime(2022, 1, 14, 10, 50,
tzinfo=zoneinfo.ZoneInfo("Europe/Madrid"))
dt2 = dt1.replace(tzinfo=zoneinfo.ZoneInfo("utc"))
print(dt1)
print(dt2)
Page 65
import datetime
import zoneinfo
dt1 = datetime.datetime(2022, 1, 14, 10, 50, tzinfo=zoneinfo.ZoneInfo("Europe/Madrid"))
dt2 = dt1.astimezone(tz=zoneinfo.ZoneInfo("utc"))
print(dt1)
print(dt2)
Page 140
import random
class randItIterator():
def __next__(self):
return random.random()
def __iter__(self):
return self
class randIt(object):
def __iter__(self):
return randItIterator()
numbers=randIt()
for x in numbers:
print(x)
Page 142
import random
class randListIterator():
def __init__(self,rndList):
self._n = 0
self._data = rndList.data
def __next__(self):
if self._n >= len(self._data):
raise StopIteration
next = self._data[self._n]
self._n = self._n+1
return next
class randList(object):
def __init__(self):
self.data = []
for i in range(5):
self.data.append(random.random())
def __iter__(self):
return randListIterator(self)
numbers = randList()
for x in numbers:
print(x)
for x in numbers:
print(x)
Page 182
class Tree:
class Node:
def __init__(self, value):
self.left = None
self.right = None
self.value = value
class TreeIter():
def __init__(self, tree):
self.stack = []
self.currentNode = tree.root
def __iter__(self):
return self
def __next__(self):
node = self.currentNode
if node is None:
raise StopIteration
if node.right is not None:
self.stack.append(node.right)
if node.left is not None:
self.currentNode = node.left
elif len(self.stack) > 0:
self.currentNode = self.stack.pop()
else:
self.currentNode = None
return node
def __init__(self, value):
self.root = Tree.Node(value)
def __iter__(self):
return Tree.TreeIter(self)
def appendBinarySearch(self, value):
node = self.root
while True:
if node.value > value:
if node.left is None:
node.left = self.Node(value)
return
node = node.left
else:
if node.right is None:
node.right = self.Node(value)
return
node = node.right
def appendBreathFirst(self, value):
queue = [self.root]
while len(queue) > 0:
node = queue.pop(0)
if node.left is None:
node.left = Tree.Node(value)
return node.left
queue.append(node.left)
if node.right is None:
node.right = Tree.Node(value)
return node.right
queue.append(node.right)
tree = Tree(0)
for i in range(1, 15):
tree.appendBreathFirst(i)
for node in tree:
print(node.value)
tree = Tree(8)
for i in [3, 10, 1, 6, 14, 4, 7, 13]:
tree.appendBinarySearch(i)
for node in tree:
print(node.value)
Page 211
import random
msg=b"Hello World Of Secrets"
oneTime=random.randbytes(len(msg))
crypt= bytes([a^b for a, b in zip(msg,oneTime)])
print(crypt)
decrypt= bytes([a^b for a, b in zip(crypt,oneTime)])
print(decrypt)
Page 225
import pathlib
path = pathlib.Path("myBinFile.bin")
bytes = bytes([0xAA, 0x55, 0xAA, 0x55])
f = open(path, mode="wb")
f.write(bytes)
f.close()
f = open(path, mode="rb")
bytes = f.read(4)
f.close()
print(bytes.hex(","))
Page 226
import pathlib
path = pathlib.Path("myBinFile.bin")
myValue1 = 1234
f = path.open(mode="wb")
f.write(myValue1.to_bytes(4, byteorder="big"))
f.close()
f = path.open(mode="rb")
b = f.read(4)
f.close()
myValue2 = int.from_bytes(b, byteorder="big")
print(myValue2)
import pathlib
path = pathlib.Path("myBinFile.bin")
myString1 = "Hello World"
b = myString1.encode(encoding="utf8")
f = path.open(mode="wb")
n = f.write(b)
f.close()
f = path.open(mode="rb")
b = f.read(n)
f.close()
myString2 = b.decode(encoding="utf-8")
print(myString2)
Page 227
import pathlib
path = pathlib.Path("myBinFile.bin")
myString1 = "Hello World"
b = myString1.encode(encoding="utf8")
n = len(b)
f = path.open(mode="wb")
f.write(n.to_bytes(4, byteorder="big"))
m = f.write(b)
f.close()
if m != n:
print("file error")
f = path.open(mode="rb")
b = f.read(4)
n = int.from_bytes(b, byteorder="big")
b = f.read(n)
f.close()
myString2 = b.decode(encoding="utf-8")
print(myString2)
Page 230
import pathlib
import struct
def floatToBytes(f):
return struct.pack(">d",f)
def floatFromBytes(b):
return struct.unpack(">d",b)[0]
path = pathlib.Path("myBinFile.bin")
myFloat = 3.14159
f = path.open(mode="wb")
m = f.write(floatToBytes(myFloat))
f.close()
f = path.open(mode="rb")
b = f.read(8)
f.close()
myFloat = floatFromBytes(b)
print(myFloat)
Page 235
import dataclasses
import struct
import pathlib
import os
@dataclasses.dataclass
class person:
name:str=""
id:int=0
score:float=0.0
myStruct= struct.Struct(">25sld")
n=37
def save(self,f):
b=person.myStruct.pack(
self.name.encode(encoding="utf8"),self.id,self.score)
f.write(b)
def load(self,f,id):
f.seek(id*person.n,0)
b=f.read(person.n)
a,b,c=person.myStruct.unpack(b)
self.name=a.decode(encoding="utf8").rstrip("\0x00")
self.id=b
self.score=c
path=pathlib.Path("myBinFile.bin")
os.remove(path)
f=path.open(mode="ab")
me=person("mike",42,3.14)
for id in range(50):
me.id=id
me.save(f)
f.close()
f=path.open(mode="r+b")
me2=person()
me2.load(f,20)
print(me2)
me2.load(f,5)
print(me2)
f.close()
Page 248
import pathlib
import dataclasses
import csv
@dataclasses.dataclass
class person:
name:str=""
id:int=0
score:float=0.0
me = person("mike", 42, 3.145)
path = pathlib.Path("myTextFile.csv")
with path.open(mode="wt", newline="") as f:
peopleWriter = csv.writer(f)
for i in range(43):
peopleWriter.writerow([me.name, i, me.score])
with path.open(mode="rt") as f:
peopleReader = csv.reader(f)
for row in peopleReader:
print(row)
Page 251
import pathlib
import dataclasses
import csv
@dataclasses.dataclass
class person:
name:str=""
id:int=0
score:float=0.0
def values(self):
return [self.name,str(self.id),str(self.score)]
class MyCSV(csv.Dialect):
quoting =csv.QUOTE_NONNUMERIC
delimiter = ','
quotechar = '"'
lineterminator = '\r\n'
me=person("mike",42,3.145)
path=pathlib.Path("myTextFile.csv")
with path.open(mode="wt",newline="") as f:
peopleWriter=csv.writer(f,dialect=MyCSV)
for i in range(43):
peopleWriter.writerow([me.name,i,me.score])
with path.open(mode="rt") as f:
peopleReader=csv.reader(f,dialect=MyCSV)
for row in peopleReader:
print(row)
Page 256
import pathlib
import dataclasses
import json
@dataclasses.dataclass
class person:
name:str=""
id:int=0
score:float=0.0
me=person("mike",42,3.145)
path=pathlib.Path("myTextFile.json")
with path.open(mode="wt") as f:
s=json.dumps(dataclasses.asdict(me))
print(s,file=f)
with path.open(mode="rt") as f:
for line in f:
data= json.loads(line)
me1=person(**data)
print(me1)
Page 260
from ast import parse
import pathlib
import xml.etree.ElementTree
data="""
<Books>
<Book rating="5">
First book on Python
<Title>
Programmer's Python: Everything is an Object
</Title>
<Author>
Mike James
</Author >
<Publisher >
IO Press
</Publisher>
</Book>
<Book rating="5">
<Title>
The Programmer’s Guide To Theory
</Title>
<Author>
Mike James
</Author >
<Publisher >
IO Press
</Publisher>
</Book>
</Books>
"""
path=pathlib.Path("myTextFile.xml")
rootElement=xml.etree.ElementTree.fromstring(data)
tree=xml.etree.ElementTree.ElementTree(rootElement)
tree.write(path)
Page 265
import pathlib
import pickle
path=pathlib.Path("myBinaryFile.pickle")
data=[1,2,{"name":"mike","id":42,"score":3.145}]
with path.open(mode="wb") as f:
pickle.dump(data,f)
with path.open(mode="rb") as f:
print(pickle.load(f))
import pathlib
import dataclasses
import pickle
@dataclasses.dataclass
class Person:
name:str=""
id:int=0
score:float=0.0
def display(self):
print(self.name)
me=Person("mike",42,3.14)
path=pathlib.Path("myBinaryFile.pickle")
with path.open(mode="wb") as f:
pickle.dump(me,f)
with path.open(mode="rb") as f:
me2=pickle.load(f)
me2.display()
Page 268
import pathlib
import pickle
class readFile():
def __init__(self):
self.path=pathlib.Path("myFile.txt")
self.f= self.path.open(mode="rt")
self.pos=self.f.tell()
def get(self):
return self.f.readline()
def __getstate__(self):
self.pos=self.f.tell()
state = self.__dict__.copy()
del state['f']
return state
def __setstate__(self, state):
self.__dict__.update(state)
self.f= self.path.open(mode="rt")
self.f.seek(self.pos)
read1=readFile()
print(read1.get())
path=pathlib.Path("myTemp.pickle")
with path.open(mode="wb") as f:
pickle.dump(read1,f)
with path.open(mode="rb") as f:
read2=pickle.load(f)
print(read2.get())
Page 287
from math import log2
import numbers
import collections.abc
class Tree(collections.abc.Sequence):
class Node:
def __init__(self,value):
self.left=None
self.right=None
self.value=value
def __init__(self,value):
self.root=Tree.Node(value)
self.len=1
def appendBreathFirst(self,value):
queue=[self.root]
while len(queue)>0:
node=queue.pop(0)
if node.left is None:
node.left=Tree.Node(value)
self.len+=1
return node.left
queue.append(node.left)
if node.right is None:
node.right=Tree.Node(value)
self.len+=1
return node.right
queue.append(node.right)
def getNode(self,key):
if key>=len(self) or key<0:
raise IndexError('Index out of range')
if key==0:
return self.root
row=int(log2(key+1))
currentNode=self.root
for r in range(1,row+1):
k=int((key+1)/2**(row-r)-1)
if k%2 :
currentNode=currentNode.left
else:
currentNode=currentNode.right
return currentNode
def setNode(self,key,node):
row=int(log2(key+1))
currentNode=self.root
for r in range(1,row):
f=2**(row-r)
k=int((key+1- f)/f)
if k%2 :
currentNode=currentNode.left
else:
currentNode=currentNode.right
if key%2 :
currentNode.left=node
else:
currentNode.right=node
def __len__(self):
return self.len
def __getitem__(self,key):
if isinstance(key,slice):
temp=[]
for i in range(0,len(self))[key]:
temp.append(self.getNode(i))
return temp
if isinstance(key,int):
return self.getNode(key)
raise TypeError("invalid index")
def __setitem__(self,key,value):
if isinstance(key,slice) and isinstance(value,list):
for i in range(0,len(self))[key]:
self.getNode(i).value=value.pop(0)
elif isinstance(key,int):
self.getNode(key).value=value
else:
raise TypeError("invalid index or value")
def __imul__(self,m):
if isinstance(m,numbers.Number):
for i in range(0,len(self)):
self.getNode(i).value*= m
return self
def __eq__(self,otherTree):
if not isinstance(otherTree,Tree):
return NotImplemented
if len(self)!=len(otherTree):
return False
for i in range(0,len(self)):
if self.getNode(i).value!= otherTree.getNode(i).value:
return False
return True
def __hash__(self):
temp=[]
for i in range(0,len(self)):
temp.append(self.getNode(i).value)
return hash(tuple(temp))