Wednesday, September 6, 2017

ONE SNIPPET PRO - PYTHON

One Snippet Pro is an initiative to learn and practice the programming in one snippet , We start learning a language or a technology using a simple hello world and we lean forward step by step to become a pro , But in this demo i am going to code it in to one snippet and cover as much as concepts possible. We have a lot of programming language and technologies in this series of "One Snippet Pro", The Post will have only two sections Simple introduction of the technology and One Snippet.

I am a big fan of game of thrones so most of the identifies , loops , destroying objects as a part of few snippets will have the logic play which you can relate to  Game of thrones.

You can email me at redhatvicky@gmail.com or twitter me at @rvigneshwaran88 for any queries ,suggestions and feedback. Would be very happy to take it.

Python :

Python is a general-purpose interpreted, interactive, object-oriented, and high-level programming language. It was created by Guido van Rossum during 1985- 1990. Like Perl, Python source code is also available under the GNU General Public License (GPL).

I have commit the same code in git , click here to get the git code


import time; #required inorder to use time module
import calendar; #required inorder to use calender module
import math as mathInstance #user can import and rename and use the object
import os as osInstance #required inorder to use os module
import shutil as fileUtils #required in order to use high level file operations
import re as regexInstance #required in order to use regular expression

#Prints the content  (If you are running versions below 3)
#print "Hello, Python!"

#Prints the content (If you are running new version of Python)
print ("Hello World")

#Single and Multiline Commnets (All characters after the # and up to the end of the physical line is considered to be commented)
#print("Single line Comment")
#print("Multi Line Comment")

# ways of initializing the variables (5 Standard datatypes : Numbers,String,List,Tuple,Dictionary)
serialName = "Game of Thrones" #string data type
currentSeason = 7 #integer data type
averageDeathPerSeason = 177.57 #flating point datatype
gameOfThrones = aSongOfIceAndFire = createdBy = "George R. R. Martin" #multiLineAssignmnet
serialName,currentSeason,averageDeathPerSeason = " Game of Thrones ",7,177.57

# ways of concatinating and printing variables
print("Serial Name :: ",serialName," Current Season : ",currentSeason," Average Death Per Season : ",averageDeathPerSeason)
print(gameOfThrones,aSongOfIceAndFire)

# datatypes : Four types in the category numbers (int,long,float,complex)

# When user has multiline statements line continuation character (\) will solve the issue
total = "Game of Thrones " + \
        "used seven writers " + \
        "in six seasons"
print(total)

# datatypes : String
houseStark = 'EddardNedStark' #create String with single quote
houseStark = "EddardNedStark" #create String with double quote

#When we have multiple lines this triple quote is useful, we dont need a line contination character
houseStark = """EddardNedStark"""  #create String with triple quote
houseStark = '''EddardNedStark'''  #create String with triple quote

# Python allows negative indexing for its sequences,The index of -1 refers to the last item, -2 to the second last item and so on
print(houseStark)          # Prints full string
print(houseStark[0])      # Prints first character of the string
print(houseStark[-1])      # Prints last character of the string
print(houseStark[2:5])     # Prints characters starting from 3rd to 5th
print(houseStark[5:-2])   # Prints characters starting from 6th to 2nd last character
print(houseStark[2:])      # Prints string starting from 3rd character
print(houseStark * 2)     # Prints string two times
print(houseStark + "FROM WINTERFELL") # Prints concatenated string
print(houseStark * 2.5) #throws error "TypeError: string indices must be integers"
print(houseStark[125]) #throws error "IndexError: string index out of range"
print("Ned" in houseStark) #returns true if the string contains "Ned"
print("Ned" not in houseStark) #returns false as the string contains "Ned"

#Strings are immutable in python.
#houseStark[5] = 'a' #throws error "TypeError: 'str' object does not support item assignment"
#del my_string[1] #throws error "TypeError: 'str' object doesn't support item deletion"

#common python String methods
seasonOneEpisodeTwo = "the Kingsroad"
print(seasonOneEpisodeTwo.lower()) #Converts all uppercase letters in string to lowercase.
print(seasonOneEpisodeTwo.upper()) #Converts lowercase letters in string to uppercase.
print(seasonOneEpisodeTwo.split()) #Splits string according to delimiter str (space if not provided)
print("You#Win#or#You#Die".split("#")) #Splits string according to delimiter str (space if not provided)
print(" ".join(seasonOneEpisodeTwo)) #Merges (concatenates) the string representations of elements.
print(seasonOneEpisodeTwo.find('Kings')) #Determine if str occurs in string
print(seasonOneEpisodeTwo.capitalize()) #Capitalizes first letter of string
print(seasonOneEpisodeTwo.count("a")) #Counts how many times str occurs in string
print(seasonOneEpisodeTwo.endswith("road")) #Determines if string or a substring of string ends with suffix
print(seasonOneEpisodeTwo.isalnum()) #Returns true if string has at least 1 character and all characters are alphanumeric and false otherwise.
print(seasonOneEpisodeTwo.isalpha()) #Returns true if string has at least 1 character and all characters are alphabetic and false otherwise.
print(seasonOneEpisodeTwo.isdigit()) #Returns true if string contains only digits and false otherwise.
print(seasonOneEpisodeTwo.islower()) #Returns true if string has at least 1 cased character and all cased characters are in lowercase and false otherwise.
print(seasonOneEpisodeTwo.isnumeric()) #Returns true if a unicode string contains only numeric characters and false otherwise.
print(seasonOneEpisodeTwo.isspace()) #Returns true if string contains only whitespace characters and false otherwise.
print(seasonOneEpisodeTwo.istitle()) #Returns true if string is properly "titlecased" and false otherwise.
print(len(seasonOneEpisodeTwo)) #Returns the length of the string
print(max(seasonOneEpisodeTwo)) #Returns the max alphabetical character from the string seasonOneEpisodeTwo.
print(min(seasonOneEpisodeTwo)) #RReturns the min alphabetical character from the string seasonOneEpisodeTwo.
print(seasonOneEpisodeTwo.isdecimal()) #Returns true if a unicode string contains only decimal characters and false otherwise.

#pythonLists : similar to arrays but lists can hold items of hetrogeneous data type
listInstanceFirst = ["David Benioff & D. B. Weiss","Tim Van Patten"]
listInstanceSecond = ["Brian Kirk","Daniel Minahan","Alan Taylor"]
listConsolidated = listInstanceFirst + listInstanceSecond
nestedListInstance = ["Fire and Blood", ["Robb", "the king", "Jaime","captured by the Starks"], [10],'T'] #create a nested list

print(listInstanceFirst) #prints the whole list
print(listInstanceFirst[0]) #prints first element in the list
print(listInstanceFirst[-1]) #prints the last element in the list
print(listConsolidated[2:5])
print(listConsolidated[1:]) #prints from the elements starting from 2nd position
print(listConsolidated[:-5]) #prints from negining to the fourth
print(listConsolidated[:]) #prints element from beginning to the end

#add of delete any elements from the list
seasonOneEpisodesList = ["The Kingsroad","The Wolf and the Lion","A Golden Crown","You Win or You Die","The Pointy End",
"Baelor","Fire and Blood"]
seasonOneEpisodesList[0] = "Winter Is Coming" #insert in the respective index of the list
print(seasonOneEpisodesList)
seasonOneEpisodesList[1:4] = ["Lord Snow","Cripples, Bastards, and Broken Things"] #insert multiple items in position of the list
print(seasonOneEpisodesList)
seasonOneEpisodesList.append("The Kingsroad")
print(seasonOneEpisodesList)
seasonOneEpisodesList.append(["The Wolf and the Lion","A Golden Crown","You Win or You Die"])
print(seasonOneEpisodesList)
del seasonOneEpisodesList[0:2] # delete mltiple items in the list
print(seasonOneEpisodesList)

#More functions to manage a list
newListInstance = ['R','o','b','e','r','t','B','a','r','a','t','h','e','o','n']
newListInstance.remove('o') #removes the respective element from the list
print(newListInstance.pop(1)) #pops out respective element in the lisst
print(newListInstance.pop()) #pops out last element from the list
newListInstance.clear() # removes all the element from the list
print(newListInstance)
appendNewListInstance = ['H','a','m','m','e','r']
newListInstance.append(appendNewListInstance) # Add all elements of a list to the another list
print(newListInstance)
newListInstance.insert(4,appendNewListInstance) #Insert an item at the defined index
print(newListInstance)
print(appendNewListInstance.index('H')) #Returns the index of the first matched item
appendNewListInstance.sort()  #Sort items in a list in ascending order
print(appendNewListInstance)
appendNewListInstance.sort(reverse=True) #sort in descending order
print(appendNewListInstance)
newListInstance.reverse() #Reverse the order of items in the list
print(newListInstance)
print(newListInstance.copy()) #Returns a shallow copy of the list

#data type : Python Tuples : similar to the list but enclosed within parentheses.
# Tuple are immutable, iterating through tuple is faster than with list , write protected,
# Tuples that contain immutable elements can be used as key for a dictionary
tupleInstance = ()
tupleInstance = ("Catelyn Stark", "Sansa Stark", "Arya Stark","Robb Stark","Bran Stark")
tupleInstance = (22, "Jaime Lannister", 45)
tupleInstance = ("Viserys Targaryen", [82, 14, 63], (134, 221, 312))
tupleInstance = 3, 4.6, "Tyrion Lannister"
a, b, c = tupleInstance
print(a)
print(b)
print(c)

#creating tuple with one elements has a problem
tupleInstance = ("Cersei Lannister")
print(type(tupleInstance)) # this will result in the data type string <class 'str'>
tupleInstance = ("Daenerys Targaryen",)
print(type(tupleInstance)) # this will result in the data type tuple <class 'tuple'>
tupleInstance = "Jon Snow",
print(type(tupleInstance)) #this will result in the data type tuple <class 'tuple'>
# We can manage tuble as we manage the list

#additionals methods in a tuple
print(any(tupleInstance)) #Return True if any element of the tuple is true. If the tuple is empty, return False.
print(all(tupleInstance)) #Return True if all elements of the tuple are true (or if the tuple is empty).
print(len(tupleInstance)) #Return the length (the number of items) in the tuple.
print(max((82, 14, 63))) #Return the largest item in the tuple.
print(min((82, 14, 63))) #Return the smallest item in the tuple
print(sorted(tupleInstance)) #Take elements in the tuple and return a new sorted list (does not sort the tuple itself).
print(sum((82, 14, 63))) #             Retrun the sum of all elements in the tuple.

#Convert an iterable (list, string, set, dictionary) to a tuple.
print(tuple("Daenerys Targaryen"));
print(tuple(["Catelyn Stark", "Sansa Stark", "Arya Stark","Robb Stark","Bran Stark"]));


# data type : Dictionary : hash table type.
dictionaryInstance = {}
dictionaryInstance = {1: 'Winter Is Coming',2:'The Kingsroad',3:'Lord Snow'}
dictionaryInstance = {1: 'Winter Is Coming','WinterIsComing':["White Walkers","Eddard Ned Stark","Jon Arryn"
"King Robert Baratheon"]}
print(dictionaryInstance.get('WinterIsComing')) #using get to access elements
print(dictionaryInstance['WinterIsComing']) # directing acces using the key in dictionary

#create dictionary using the dict command
dictionaryInstance = dict({6:'A Golden Crown', 7:'You Win or You Die',8:'The Pointy End',9:'Baelor',10:'Fire and Blood'})
print(dictionaryInstance.get(7))
dictionaryInstance = dict([(4,'Cripples, Bastards, and Broken Things'), (5,'The Wolf and the Lion')])
print(dictionaryInstance[5])
# To print keys and values of the dictionary
print(dictionaryInstance.keys())   # Prints all the keys of the disctionary
print(dictionaryInstance.values()) # Prints all the values of the disctionary

#Arthimatic operators  a**b (exponential (power)) a//b (Floor Division)
a,b = 10,20
print(" a+b :",(a+b)," a–b :",(a-b)," a*b :",(a* b)," b/a :",(b / a)," b%a :",(b % a)," a**b :",(a**b)," a//b : ",a//b)

#Comparison Operators
print(" a == b :",(a == b)," a > b :",(a > b)," a < b :",(a < b)," a >= b :",(a >= b)," a <= b :",(a <= b))

#Bitwise Operators
print(" a & b :",(a & b)," a | b :",(a | b)," a ^ b :",(a ^ b)," ~a :",(~a)," a << 2 :",(a << 2)," a >> 2 :",(a >> 2))

#Membership Operators
listInstanceMem = [21,45,67,78,54,32]
print (75 in listInstanceMem) #Evaluates to true if it finds a variable in the specified sequence and false otherwise.
print (71 not in listInstanceMem) #Evaluates to true if it does not find a variable in the specified sequence and false otherwise.

#Identity Operators
print (a is b) #Evaluates to true if the variables on either side of the operator point to the same object and false otherwise.
print (a is not b) #Evaluates to false if the variables on either side of the operator point to the same object and true otherwise.

# Flow Control : if and else
# if Clause
king = "Robert Baratheon"
if king.endswith("Baratheon"):
    print("Yes,He is a baratheon")
print("This is a common block which is printed always")

#if else and elif
if king.endswith("Targaryen"):
    print("Yes,He is a Targaryen")
elif king.endswith("Stark"):
    print("Yes,He is a stark")
elif king.endswith("Baratheon"):
    print("Yes,He is a baratheon")
else:
    print("random people in got")


#Flow Control : for loop
stark = ["Catelyn Stark", "Sansa Stark", "Arya Stark","Robb Stark","Bran Stark"]
for indv in stark:
  print("Pointer is at :: ",indv)

print(range(10)) # generates sequence of numbers using range function
print(list(range(10))) # sets the range of numbers from 0 to 9 in a List and prints it
print(list(range(1,10))) # sets the range of numbers from index 1 to 9 in a List and prints it
print(list(range(2, 20, 3))) #firstParamter(2)=start,secondParamter(20)=stop,thirdParameter(3)=step

#using ranges to determine the length
for indv in  range(len(stark)):
  print("Pointer is at :: ",indv," value is : ",stark[indv])

#use for with else : "Else is executed when there is no break in the for loop"
for indv in range(len(stark)):
    print("killing :: ",stark[indv])
else:
    print("No starks left to kill !!! Red Wedding " )

# Flow control : While Loop
# While with optional else (The else part is executed if the condition in the while loop evaluates to False)
totalNumber,sumOfItems,index = 10,0,1
while index <= totalNumber:
    sumOfItems = sumOfItems + index
    index = index+1
else:
    print("Conditional false else")
print("The sumOfItems is", sumOfItems)

#Time functions
timeInstance = time.localtime(time.time())
print("Local current time :", timeInstance)

#Formattng Time according to the user requirement
timeInstance = time.asctime(time.localtime(time.time()) )
print("Local current time :", timeInstance)

#To Display calender of the respective month
calenderInstance = calendar.month(2017, 2)
print(calenderInstance)

# Function is a group of related statements that perform a specific task
# Function creation (def is a keyword) def functionname(parameter1,parameter2):
def greet(name):
  """This content is a docstring,generally docstrings are
     enclosed within triple quoteswhich can extend
                 up to multiple lines , this is strored in __doc__
     attribute"""
  print("Good morning ",name)

greet("Samwell Tarly")

# docstring attribute with method call
print(greet.__doc__)

# if we dont provide arguement to the method it results in TypeError, but we can provide default arguements
def greet(name, msg = "Good morning !!! "):
                print(msg + name)

greet("Samwell Tarly ","Good Noon !!! ")
greet("Samwell Tarly ")

#anonymous function : function without a name (represented using a keyword called lambda)
# will use the same function greet as the anonymous function
sendGreetings = lambda name : print ("Good Morning !!! ",name)
sendGreetings("Samwell Tarly ")

# Usage of map and Filter with anonymous functions
listRangeInstance = list(range(10))
filteredListinstance = list(filter(lambda x: (x%2 == 0),listRangeInstance))
mapListinstance = list(map(lambda x: x^2,listRangeInstance))
print("Map Applied Value ::",mapListinstance,"Filter Applied Value : ",filteredListinstance)

# Usage of variable arguements in a function
def sumOfItems(operation="add",*objectList):
                sum = 0
                for index in objectList :
                  sum = sum + index
                print("The Sum of all elements in the list is :: ",sum)
                #ret accessed globally from that function.
                print(globals())
                #If locals() is called from within a function, it will return all the names that can be accessed locally from that function.
                print(locals())

sumOfItems("add",10,20,30) # this will yield the sum as 60
sumOfItems("add",10,20,30,40) #this will yield the sum as 100

#Mathematical Functions
print(mathInstance.pi) #mathematical Constant
print(mathInstance.factorial(22)) # factorial of a number
print(mathInstance.sqrt(225)) #factorial of a number
print(mathInstance.isnan(22)) #check whether its a number or not
print(mathInstance.exp(2)) #exponent function
print(mathInstance.e) #mathematical Constant

#The dir() built-in function returns a sorted list of strings containing the names defined by a module.
print(dir(calendar))

#Basic File Operations and exceptions
try:
   fileInstance = open("test.txt",encoding = 'utf-8')
   #Read the file line by line
   for lineReader in fileInstance :
     print(lineReader, end = '')

   #method reads a file till the newline, including the newline character.
   print(fileInstance.readlines())

finally:
   fileInstance.close()

#Alternative way to open a file using "with" keyword,We don't need to explicitly call the close() method.
with open("pythonTags.txt",encoding = 'utf-8') as fileInstance:
  print(fileInstance.read()) #Read the contends in the file
  print(fileInstance.read(4)) #Read the first 4 data
  print(fileInstance.tell()) #Get the current file position
  print(fileInstance.seek(0)) #Bring the cursor to the zeroth position
  print(fileInstance.name) #get the fileName from the file instance
  print(fileInstance.closed) # to Know whethre the file is closed or not
  print(fileInstance.mode) # to Know the opening mode of the file

#Directory Operations
print(osInstance.getcwd()) # get the current working directory
print(osInstance.getcwdb()) # get the current working directory as byte object
#osInstance.chdir("C:\\")
#print(osInstance.getcwd()) #printing after changing the directory
print(osInstance.listdir()) # to list all the directoris and files
#osInstance.mkdir('test') #make a new directory
#osInstance.rename('test','modfied') rename a directory
#osInstance.remove('test.txt') #to remove a file
#osInstance.rmdir('modfied') #to remove a directory
#fileUtils.rmtree('test') #Delete an entire directory tree;

class Playaround:
  """This is a docString for class, we can access using
    __doc__ attribute"""

  def __init__(self,firstNum=10,secondNum=10):
                self.a = firstNum
                self.b = secondNum

  a,b = 20,30

  def add(self):
                print(a+b)

  def greet(self):
    print("Good Morning ,The Value of a is ",self.a,"The Value of b is ",self.b)

print("Playaround.a : ",Playaround.a,"Playaround.b : ",Playaround.b)
print("Playaround.add : ",Playaround.add) #call the method inside the class
print("Doc string of the class :: ",Playaround.__doc__) #display the doc string of the class
newObjectInstance = Playaround() # Object creation
print("The Value of a is ",newObjectInstance.a,"The Value of b is ",newObjectInstance.b)
print(newObjectInstance.add) #<bound method Playaround.add of <__main__.Playaround object at 0x004EA430>>
newObjectInstance.add() # method call from the object
newObjectInstance.greet() # method call from the object

#One More class Sample
class Targaryen:
  count = 0

  def __init__(self,name):
    self.name = name
    Targaryen.count += 1

  def displayTargaryanCount(self):
    print("The Count of the Targaryen is :: ",Targaryen.count)

  def displayTargaryan(self):
    print("The Targaryen is called :: ",self.name," Targaryen")

#Creating Objects
duncanInstance = Targaryen("Duncan")
rhaellaInstance = Targaryen("Rhaella")
aegonInstance = Targaryen("Aegon")
viserysInstance = Targaryen("Viserys")

#access using the object created
rhaegarInstance = Targaryen("Rhaegar")
rhaegarInstance.displayTargaryan()

# Manipulating attributes of an object
daenerysInstance = Targaryen("Daenerys")
print(hasattr(daenerysInstance, 'name')) # Returns true if 'name' attribute exists
print(getattr(daenerysInstance, 'name')) # Returns value of 'name' attribute
setattr(daenerysInstance, 'name', "Khaleesi") # Set attribute 'name' at Khaleesi
daenerysInstance.displayTargaryan()
#delattr(daenerysInstance, 'name') # Delete attribute 'age'

# Accessing the Glaobal varibale in the class
print("The Count of the Targaryen is ",Targaryen.count)

# More build in Attributes of the class
print("Targaryen.__doc__:", Targaryen.__doc__) #to get the class documentation
print("Targaryen.__name__:", Targaryen.__name__)  # to retrive the classname
print("Targaryen.__module__:", Targaryen.__module__) #to get the module name in which the class is defined
print("Targaryen.__dict__:", Targaryen.__dict__) #Dictionary containing the class's namespace.

#Inheritance #Stark Here is a Parent Class and Westeros is a Child Class
class Stark:

  def __init__(self,firstName,secondName):
    self.firstName = firstName
    self.secondName = secondName

  def displayFullName(self):
   return self.firstName + " " +  self.secondName

class Westeros(Stark):

  def __init__(self,firstName,secondName,placeName):
   Stark.__init__(self,firstName,secondName) #refer the parent class init
   self.placeName = placeName

  def getDetails(self):
    return "He is named :: ",self.displayFullName," from ",self.placeName

starkInstance = Stark("Ned","Stark")
print(starkInstance.displayFullName())

westerosInstance = Westeros("Catelyn","Stark","The Winterfell")
print(westerosInstance.getDetails())

#Regular Expression
inputLine = """Winterfell is the name given to the ancestral castle of House Stark.
It is built over a natural hot spring and the scalding water runs through the castle walls, warming halls and rooms."""
print(regexInstance.findall(r'is', inputLine)) # Find all instance of the word
matchInstance = regexInstance.search(r'is', inputLine) #Match the content any where
print(matchInstance.group(0))
#The match object can tell us the start and end indexes also here below is the sample
print(matchInstance.start())
print(matchInstance.end())

# parse by groups
westerosInformation = 'Essos, Climate: Mediterranean climate'
matchInstance = regexInstance.search(r'(\w+), (\w+): (\S+)', westerosInformation)
print("matchInstance.group(1) :: ",matchInstance.group(1))
print("matchInstance.group(2) :: ",matchInstance.group(2))
print("matchInstance.group(3) :: ",matchInstance.group(3))
# we can use find all with this snippet
print(regexInstance.findall(r'(\w+), (\w+): (\S+)', westerosInformation))
# we can set a name to that group and access by the name
matchInstance = regexInstance.search(r'(?P<placeInWesteros>\w+), (?P<type>\w+): (?P<info>\S+)', westerosInformation)
print("matchInstance.group(1) :: ",matchInstance.group("placeInWesteros"))
print("matchInstance.group(2) :: ",matchInstance.group("type"))
print("matchInstance.group(3) :: ",matchInstance.group("info"))

# Iterators two methods __iter__() and __next__()
westerosList = ["The North ","Winterfell","The Iron Islands","The Riverlands","The Stormlands"]
iteratorInstance = iter(westerosList)
while True:
  try:
    pointer = next(iteratorInstance)
    print(pointer)
  except StopIteration:
    break

No comments:

Post a Comment