/pyquick

Exercise programs of Googles python tutorial

Primary LanguagePython

pyquick

=======

class link

https://developers.google.com/edu/python/

link for my notes

https://docs.google.com/document/d/1L2zHtovCJU-yKml74QyuWYYKYi-La0OHOqi_RE7qR5Q/edit?usp=sharing

Contents of this project :

    Exercise programs of Googles python tutorial

Notes

-sys.argv[0] ---- program name itself 

-arguments and variables similar no types 

    def Hello(name):

      a = ‘hello’

-print seperate by , then space is includes automatically

-print 'Hello',name,a   ===> Hello rohan!!! 10

-print'Hello'+name+str(a) ⇒ Hellorohan!!!10

-string not empty, num is not 0 -- > true

How python works

-does everything at last possible second

-in the moment it checks at every line 

-strings are immutable (returns new string)

-a.find() - returns first occurance

-a.lower() 

-place holder %

-‘Hi %s I have %d donuts’ %  (‘Alice’,29)

-These are not python strings and not unicode strings these are just series of bytes.

-Strings slice 

>>> a = 'Hello'

>>> a

'Hello'

>>> a[1:3]

'el'

>>> a[1:2]

'e'

>>> a[1:5]

'ello'

>>> a[1:]

'ello'

>>> a[:5]

'Hello'

>>> a[:]

'Hello'

Negatives


Lists

-Same syntax across all 

a = [1,2,3,’a’]

-len(a)

-b = a (does not create a copy both point to same)

-lists are mutable

-python has garbage collector {need to make copies is not much}

-a ==b does the same returns true

-slices works fine with lists as well

-There is built in for each

for var in list:

   print var

-Check if value in a list {works for lot of DS - in hash table does }

-value in list

-Built in for lists

-append - does not return new list returns None

-a = [1,2,3]

-a.append(4)

-a = a.append(4) # error NO NO

-a.pop(0) pops of element and returns it

-delete a from local scope

del a {complete list}

del a[1]   {delete a element}

-The range(n) function yields the numbers 0, 1, ... 

    for i in range(100)    print i

-sorting of lists - don't use .sort()

-sorted - makes a new list and sorts.

-comparison depends on the type of elements compared.{strings,ints,char}


custom sorting

old way 2 argument comparator method. python has new way

sort by length

>>> sorted(a,key=len)

['d', 'a', 'dc', 'aa', 'ccc']

>>> def last(s): return s[-1]

... 

>>> sorted(a,key=last)

['a', 'aa', 'ccc', 'dc', 'd']

split, join

>>> ':'.join(a)

'z:d:dc:a:aa'

>>> '\n'.join(a)

'z\nd\ndc\na\naa'

>>> ':'.join(a)

'z:d:dc:a:aa'

>>> b = ':'.join(a)

>>> b.split(':')

['z', 'd', 'dc', 'a', 'aa']

Don’t modify list while iterating a list (even java has same constraint)


Tuple

-Fixed size 

-immutable

-(1,2,3)

-(x,y,z) coordinates; (url,score) {taking fixed number of strings and pass together)

>>> a = (1,3,3)

>>> a

(1, 3, 3)

>>> len(a)

3

>>> a[0]

1

>>> a[0]=2

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

TypeError: 'tuple' object does not support item assignment

Sort by one thing and then sort by other 

Write key function that returns a tuple

>>> a = [(1,"b"),(2,"a"),(1,"a")]

>>> a

[(1, 'b'), (2, 'a'), (1, 'a')]

>>> sorted(a)

[(1, 'a'), (1, 'b'), (2, 'a')]

Parallel assignment 

>>> (x,y) = (1,2)


HashTable , /Dictionary

-{}

-key,value bindings

-constant time retrieval 

>>> d ={}

>>> d['a'] = 'alpha'

>>> d['a']

'alpha'

>>> d['B']

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

KeyError: 'B'

d.get()

>>> d.get('a')

'alpha'

>>> d.get('f')

how to find if something is in dict

‘a’ in d

True

.keys()

>>> d.keys()

['a']

>>> d['b'] = 'beta'

>>> d.keys()

['a', 'b']

values()

>>> d.values()

['alpha', 'beta']

----------looping

>>> for k in sorted(d.keys()): print 'key:',k,'->',d[k]

... 

key: a -> alpha

key: b -> beta

d.items()

>>> d.items()

[('a', 'alpha'), ('b', 'beta')]

>>> for tuple in d.items(): print tuple

... 

('a', 'alpha')

('b', 'beta')


Files

-----------creating cat python

-f = open(filename,’r’)

-diff modes

-text = f.read()

-lines = f.readlines()

-f.open(fname,”w”)

-f.write(text)   {be careful we can zero out file}


Regular Expression

-import re

-returns a match object

-match = re.search(pattern,text)

-match = re.search(‘iig’,’its a piiiiiiiig’)

-if match:

-----Imp notations

. dot any character except new line

\w word character

\d digit

\s space

\W everything except that matches \w

\S  everything except that matches \s

 

-left to right once it finds solution it is done 

-if looking for period char

>>> Find('a.','its a. piiiiiiiig')

a.

raw string 

do not do any special processing with backslashes

uses for writing regex

\S non whitespace

\s whitespace

\d digit 0-9

\w word character a-z A-Z 0-9

------email example

>>> m = re.search(r'([\w.]+)@([\w.]+)','egrreg gjkenrkj@snfjkv.com erngjk @ ')

>>> m

<_sre.SRE_Match object at 0xb7467800>

>>> m.group()

'gjkenrkj@snfjkv.com'

>>> m.group(1)

'gjkenrkj'

>>> m.group(2)

'snfjkv.com'

>>> m = re.search(r'([\w.]+)@([\w.]+)','egrreg gjken.rkj@snfjkv.com erngjk @ ')

>>> m

<_sre.SRE_Match object at 0xb7467140>

>>> m.group(1)

'gjken.rkj'

>>> m.group(2)

'snfjkv.com'

---------findall()

>>re.findall(r'[\w.]+@[\w.]+','egrreg@fmail.com gjken.rkj@snfjkv.com erngjk @ ')

['egrreg@fmail.com', 'gjken.rkj@snfjkv.com']

re.findall(r'([\w.]+)@([\w.]+)','egrreg@fmail.com gjken.rkj@snfjkv.com erngjk @ ')

[('egrreg', 'fmail.com'), ('gjken.rkj', 'snfjkv.com')]

-----flags

DOTALL also matches newline aswell 

how to use constants

>>> m = re.search(r'rohan','ROHAN',re.IGNORECASE)

>>> m

<_sre.SRE_Match object at 0xb726b3d8>

>>> m.group()

'ROHAN'


Modules (os,re,urllib,shutil,commands)

  1. os module

  2. platform independent systime 

  3. listdir(path) ----> list of strings

  4. os.path.exists(‘/tmp/foo’)

    2. import shutil

shutil.copy(source, dest)   ---- >file copying 

    3. import commands

launch a external process and wait for it to finish

commands.getstatusoutput(cmd)

returns a tuple of length 2 (status,output) 1st int exit code 2nd is all output std output and std error

zip -j name all absolute paths

Exceptions

def cat(filename):

 try:

   f = open(filename, 'rU') #U ignare dos line ending unix

   print '-----',filename

   text = f.read() #having just 1 string

   print text

   f.close()

 except IOError:

   print 'No File',filename 

def main():

 args = sys.argv[1:]

 for arg in args:

   cat(arg)


Modularity

just .py file namespace 

when we load a python file it runs (do not wrie print outside)

    >>> import babynames

Hi There !!!

>>> dir(babynames)

['builtins', 'doc', 'file', 'name', 'package', 'extract_names', 'main', 're', 'sys']

  >>help(babynames.extract_names)

  

urllib

  • Takes url and makes it to look like a file

  • import urllib

  • Takes a url and tries to look like a file

  • uf = urllib.urlopen(‘http://google.com’)

  • uf.read()

  • has lots of features , set cookies 

>>> urllib.urlretrieve('http://google.com/intl/en_ALL/images/logo.gif','blah.gif')

('blah.gif', <httplib.HTTPMessage instance at 0xb6fa870c>)