Upload
kiattisak-anoochitarom
View
347
Download
0
Embed Size (px)
DESCRIPTION
Teaching Basic Python at CPSU Sep 10, 2013 Thanks for all attendees :)
Citation preview
Keep Calm and Code Python
Let’s Python Department of Computing!Faculty of Science!Silpakorn University
Keep Calm and Code Python
Let’s Python Department of Computing!Faculty of Science!Silpakorn University
Keep Calm and Code Python
Let’s Python Department of Computing!Faculty of Science!Silpakorn University
Keep Calm and Code Python
Who am I ?
Kiattisak Anoochitarom!Graduated from Computer Science at SU, 2013!Software Developer at Charged Concept Co, LTD.!!Skill Sets: iOS, Rails, Node.js, Ruby, Python, Javascript, !C++, C, Java, Badminton!!Contacts:! [email protected]! Twitter: @iMacbaszii! http://www.facebook.com/baszii! http://www.macbaszii.com!
Who Invented ?
❖ Guido van Rossum!❖ Dutch!❖ 2005 - 2012 at Google inc.!❖ 2013 at Dropbox inc.
Langauge Characteristic
Langauge Characteristic
❖ Open Source (Python Software Foundation)
Langauge Characteristic
❖ Open Source (Python Software Foundation)
❖ Rapid Development
Langauge Characteristic
❖ Open Source (Python Software Foundation)
❖ Rapid Development
❖ Short and Readable Code
Langauge Characteristic
❖ Open Source (Python Software Foundation)
❖ Rapid Development
❖ Short and Readable Code
❖ Indentation!
Langauge Characteristic
❖ Open Source (Python Software Foundation)
❖ Rapid Development
❖ Short and Readable Code
❖ Indentation!
❖ Strong and Dynamic Typing
Langauge Characteristic
❖ Open Source (Python Software Foundation)
❖ Rapid Development
❖ Short and Readable Code
❖ Indentation!
❖ Strong and Dynamic Typing
❖ Interpreter Style
PEP - 8 Python Coding Style Guide
http://www.python.org/dev/peps/pep-0008/
Input & Output
Input & Output
name = raw_input()
print "Hello, %s" % (name)print "Hello, " + name
x = input()y = input()
print x * y
Input & Output
name = raw_input()
print "Hello, %s" % (name)print "Hello, " + name
x = input()y = input()
print x * yHands - on!!
Data Type
DictionaryString
Integer
Floating Point
None
List
Boolean
Class Instance
Set
Data Type
Dictionary
Integer
Floating Point
None
List
Boolean
Class Instance
Set
sentence = 'this is a cat'
Data Type
Dictionary
Floating Point
None
List
Boolean
Class Instance
Set
sentence = 'this is a cat'
x = 20
Data Type
Dictionary
Floating Point
None
List
Class Instance
Set
sentence = 'this is a cat'
x = 20
you_love_me = True
Data Type
Dictionary
None
List
Class Instance
Set
sentence = 'this is a cat'
x = 20
pi = 3.1415927
you_love_me = True
Data Type
Dictionary
List
Class Instance
Set
sentence = 'this is a cat'
x = 20
pi = 3.1415927
you_love_me = True
nothing = None
Data Type
Dictionary
Class Instance
Set
sentence = 'this is a cat'
x = 20
pi = 3.1415927
you_love_me = True
nothing = None
even_numbers = [2, 4, 6, 8, 10]
Data Type
Dictionary
Class Instance
sentence = 'this is a cat'
x = 20
pi = 3.1415927
you_love_me = True
nothing = None
even_numbers = [2, 4, 6, 8, 10]
odd_numbers = {1, 3, 5, 7, 9}
Data Type
Class Instance
sentence = 'this is a cat'
x = 20
pi = 3.1415927
you_love_me = True
nothing = None
even_numbers = [2, 4, 6, 8, 10]
odd_numbers = {1, 3, 5, 7, 9}
profile = { 'name': 'Bas',\ 'email': '[email protected]'}
Data Type
sentence = 'this is a cat'
x = 20
pi = 3.1415927
you_love_me = True
nothing = None
even_numbers = [2, 4, 6, 8, 10]
odd_numbers = {1, 3, 5, 7, 9}
profile = { 'name': 'Bas',\ 'email': '[email protected]'}
my_car = Car('Lamborghini',\ 'Aventador LP 700-4', 'White')
Data Type
sentence = 'this is a cat'
x = 20
pi = 3.1415927
you_love_me = True
nothing = None
even_numbers = [2, 4, 6, 8, 10]
odd_numbers = {1, 3, 5, 7, 9}
profile = { 'name': 'Bas',\ 'email': '[email protected]'}
my_car = Car('Lamborghini',\ 'Aventador LP 700-4', 'White')
Operator
Math Operator
Math Operator
x = 10y = 20
x + yx - yx * yx / yx % yx**yx += yy *= x
Math Operator
x = 10y = 20
x + yx - yx * yx / yx % yx**yx += yy *= x
## Tips ##
int + int = intint**(-int) = floatint / float = floatstring + string = concat_stringstring * int = multiply_stringlist + list = list
Comparison Operator
Comparison Operator
x = 10y = 20
x > yx >= yx < yx <= yx == yx != yx is y
Comparison Operator
x = 10y = 20
x > yx >= yx < yx <= yx == yx != yx is y
# Chain Comparison5 < x < y1 < y < 100
# Contains Operatorprime = [2, 3, 5, 7, 11]9 in prime # False
sentence = 'this is a cat''cat' in sentence # True
Logical Operator
Logical Operator Although Python have & and | (pipe) to do logical operation !but it isn’t readable and it will confuse with other symbol. !But Python have special symbols to do logical operation that is …
Logical Operator Although Python have & and | (pipe) to do logical operation !but it isn’t readable and it will confuse with other symbol. !But Python have special symbols to do logical operation that is …
and, or
Range and Lazy Generator
Range and Lazy Generator
range(10)# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]range(3, 10)# [3, 4, 5, 6, 7, 8, 9]range(1, 20, 3)# [1, 4, 7, 10, 13, 16, 19]
xrange(10)xrange(3, 10)xrange(1, 20, 3)
Control Statement
Conditional Statementif
Conditional Statement
number = input("Enter Number: ")
if number > 0:print "Number is Positive"
elif number < 0:print "Number is Negative"
else:print "Number is Zero"
if
Conditional Statement
number = input("Enter Number: ")
if number > 0:print "Number is Positive"
elif number < 0:print "Number is Negative"
else:print "Number is Zero"
if
result = (number % 2 == 0) ? 'Even' : 'Odd'
Conditional Statement
number = input("Enter Number: ")
if number > 0:print "Number is Positive"
elif number < 0:print "Number is Negative"
else:print "Number is Zero"
if
result = 'Even' if number % 2 is 0 else 'Odd'
Conditional Statement
number = input("Enter Number: ")
if number > 0:print "Number is Positive"
elif number < 0:print "Number is Negative"
else:print "Number is Zero"
if
result = 'Even' if number % 2 is 0 else 'Odd'
Iteration Statementfor
Iteration Statementfor
for i in xrange(1, 11):print i**2
Iteration Statementfor
for i in xrange(1, 11):print i**2
socials = ['Facebook', 'Twitter']for social in socials:
print 'I played %s' % social
Iteration Statementfor
for i in xrange(1, 11):print i**2
socials = ['Facebook', 'Twitter']for social in socials:
print 'I played %s' % social
message = 'Hello, CPSU'for letter in message:
print letter
Iteration Statementfor
for i in xrange(1, 11):print i**2
socials = ['Facebook', 'Twitter']for social in socials:
print 'I played %s' % social
# Endless Loop #while True:
# Do something
message = 'Hello, CPSU'for letter in message:
print letter
Problem#1: Most Letter CountHint: You can get list of alphabets with this code
import string !alphabets = list(string.lowercase)
Function
Functiondef function_name(params):
# Do something# Do anything
Functiondef function_name(params):
# Do something# Do anything
def fibonacci(n):fibo = 0for k in xrange(0, int(math.floor((n - 1) / 2)) + 1):
fibo += math.factorial(n - k - 1) /\(math.factorial(k) * math.factorial(n - k - 1 - k))
return fibo
Functiondef function_name(params):
# Do something# Do anything
def fibonacci(n):fibo = 0for k in xrange(0, int(math.floor((n - 1) / 2)) + 1):
fibo += math.factorial(n - k - 1) /\(math.factorial(k) * math.factorial(n - k - 1 - k))
return fibo
def colorMultiply(r, g=0, b=0):return [ r * 3.14159,\
g * 1.414,\b * 3.27 ]
Built-in Functionshttp://docs.python.org/2/library/functions.html
Problem#2: Make a Palindrome StringgnirtS emordnilaP
Sometimes some words like "localization" or "internationalization" are so long that writing them many times in one text is quite tiresome.!
Let's consider a word too long, if its length is strictly more than 10 characters. All too long words should be replaced with a special abbreviation.!
This abbreviation is made like this: we write down the first and the last letter of a word and between them we write the number of letters between the first and the last letters. That number is in decimal system and doesn't contain any leading zeroes.!
Thus, "localization" will be spelt as "l10n", and "internationalization will be spelt as “i18n".!
and make Palindrome from that word after that :)
http://codeforces.com/problemset/problem/71/A
Way Too Long Words
Indexing and Slice
Indexing and Slicemessage = 'Hello, world'message[0] # Hmessage[len(message) - 1] # dmessage[-1] # d
Indexing and Slicemessage = 'Hello, world'message[0] # Hmessage[len(message) - 1] # dmessage[-1] # d
fibo = [1, 1, 2, 3, 5, 8, 13, 21, 34]fibo[:5] # [1, 1, 2, 3, 5]fibo[2:] # [2, 3, 5, 8, 13, 21, 34]fibo[3:6] # [3, 5, 8, 13]fibo[::2] # [1, 2, 5, 13, 34]
Indexing and Slicemessage = 'Hello, world'message[0] # Hmessage[len(message) - 1] # dmessage[-1] # d
fibo[::-1] # ???message[::-1] # ???
fibo = [1, 1, 2, 3, 5, 8, 13, 21, 34]fibo[:5] # [1, 1, 2, 3, 5]fibo[2:] # [2, 3, 5, 8, 13, 21, 34]fibo[3:6] # [3, 5, 8, 13]fibo[::2] # [1, 2, 5, 13, 34]
String and Collections methods
Demo!
List ComprehensiveThe Other way to create and manipulation Python’s List
List Comprehensive
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
The Other way to create and manipulation Python’s List
List Comprehensive
squares = [] for x in range(10): squares.append(x**2)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
The Other way to create and manipulation Python’s List
List Comprehensive
squares = [x**2 for x in range(10)][0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
The Other way to create and manipulation Python’s List
List Comprehensive
squares = [x**2 for x in range(10)][0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
set1 = [1, 2, 3] set2 = [3, 1, 4]
The Other way to create and manipulation Python’s List
List Comprehensive
squares = [x**2 for x in range(10)][0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
set1 = [1, 2, 3] set2 = [3, 1, 4]
combs = [] for x in set1: for y in set2: if x != y: comb.append((x, y))
The Other way to create and manipulation Python’s List
List Comprehensive
squares = [x**2 for x in range(10)][0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
set1 = [1, 2, 3] set2 = [3, 1, 4]
combs = [(x, y) for x in set1 for y in set2 if x != y] [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
The Other way to create and manipulation Python’s List
List Comprehensive
squares = [x**2 for x in range(10)][0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
set1 = [1, 2, 3] set2 = [3, 1, 4]
combs = [(x, y) for x in set1 for y in set2 if x != y] [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
The Other way to create and manipulation Python’s List
List Comprehensive
squares = [x**2 for x in range(10)][0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
set1 = [1, 2, 3] set2 = [3, 1, 4]
combs = [(x, y) for x in set1 for y in set2 if x != y] [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
The Other way to create and manipulation Python’s List
List Comprehensive
squares = [x**2 for x in range(10)][0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
set1 = [1, 2, 3] set2 = [3, 1, 4]
combs = [(x, y) for x in set1 for y in set2 if x != y] [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
The Other way to create and manipulation Python’s List
Working with File
Working with Fileopen('filename', mode)
# r: open file for read# w: open file for write# a: open file for append
Working with Fileopen('filename', mode)
# r: open file for read# w: open file for write# a: open file for append
f = open('data.txt', r)f.read() # read file to stringf.readline() # read file for one linef.readlines() # read file to lines
Working with Fileopen('filename', mode)
# r: open file for read# w: open file for write# a: open file for append
f = open('data.txt', r)f.read() # read file to stringf.readline() # read file for one linef.readlines() # read file to lines
f.write('this is a cat') # write string to filef.writelines([list of line]) # write lines to file
Object Oriented Programming
Object Oriented ProgrammingClass
Object Oriented ProgrammingClass
Instance
Object Oriented Programmingclass Book: def __init__(self, name, size): self.name = name self.size = size class BookStack: def __init__(self): self.books = [] self.top = 0 def push(self, book): self.books.append(book) self.top += 1 def pop(self): self.top -= 1 return self.books.pop() !
Test Driven Development
Unit Testimport unittest !class TestBookStack(unittest.TestCase): # when book is created, it can return name, size def test_book_created(self): hunger_book = Book('The Hunger Games', 4) self.assertEqual(hunger_book.name, 'The Hunger Games') self.assertEqual(hunger_book.size, 4) # when Book Stack is created / top is 0 def test_book_stack_created(self): book_stack = BookStack() self.assertEqual(book_stack.top, 0) self.assertEqual(book_stack.books, []) # when push book / top increase by one def test_book_stack_push(self): hunger_book = Book('The Hunger Games', 4) book_stack = BookStack() book_stack.push(hunger_book) self.assertEqual(book_stack.top, 1) self.assertEqual(book_stack.books[0].name, 'The Hunger Games') book_stack.push(hunger_book) self.assertEqual(book_stack.top, 2) # when pop book / top decrease by one def test_book_stack_pop(self): hunger_book = Book('The Hunger Games', 4) harry_book = Book('Harry Potter', 3) book_stack = BookStack() book_stack.push(hunger_book) book_stack.push(harry_book) present_size = book_stack.top poped_book = book_stack.pop() self.assertEqual(book_stack.top, present_size - 1) self.assertEqual(poped_book.name, 'Harry Potter') if __name__ == '__main__': unittest.main()
Keep Calm and Code Python
Problem#3: Books
Instruction:!! - Using TDD!!! - Each Book have a name, size!! - Books have size and all of book!!Test case:!! - paste the new book on top!! - pick a book at top of books!! - when paste new book you must take a larger book to below!! - program can tell a present Books size
Migrate to Python 3
❖ print is function instead of statement!
❖ input()!❖ range instead of xrange!❖ more usage on lazy generator