Miguel Costa
"A serious and good philosophical work could be written consisting entirely of jokes."
Porquê aprender Python?
One of Guido's key insights is that code is read much more often than it is written"
Linha de comandos
Texto, contas
Impressões
$ python >>> print "done"
ou então...
http://pypyjs.org/
3 + 10 x = 10 x + 3 print x
x = 10 # this is a comment, btw...
type(x) # integer
y = "Rambo"
type(y) # string, right?
x = 2.0
type(x) # not an integer, anymore!
y = True
type(y) # not a string, anymore!
Em Python, tipos são definidos, mas são inferidos pelo sistema e podem mudar
name = "Bruce" lastName = "Wayne" nickname = "Batman" age = 26 fullName = name + lastName fullName = name + " " + lastName + ", the " + nickname print fullName print "I am " + fullName print "I am %s" % (fullName) print "I am %s \n and I am %d years old" % (fullName, age)
Provide information to your users by printing...
Exercises
Part 1
Cria variáveis com:
Imprime esta informação recorrendo às variáveis e apenas a um print
I am James Bond, 26 years old, and I am the coolest!
Condições
Blocos de código
scripts.py
True or False?
work = True # 'if work == True:' would also work if work is True: print "Working" else: print "Not working"
A nossa primeira condição
Remember booleans?
True or False?
A nossa primeira condição
Text
x = 10
work = True
True == False
3 < 2
x >= 10
not x < 10
# 'if work == True:' would also work
if work is True:
print "Working"
else:
print "Not working"
Inputs
Pedra-Papel-Tesoura
x = raw_input("what is your name?")
# '123' // will always be string
x = input("what is your name?")
# 123... will try to deduce
# https://en.wikibooks.org/wiki/Python_Programming/Input_and_Output
x = None
while not x:
try:
x = int(raw_input())
except ValueError:
print 'Invalid Number'
# ficheiros
# http://www.tutorialspoint.com/python/python_files_io.htm
# ficheiro sera criado se nao existir
f = open('test.txt', 'r+') # r para leitura, w para escrita
for line in f:
print line
f.write('\n mais esta linha')
f.seek(0, 0);
f.readline
# MUITO IMPORTANTE
f.close()
Listas e Estruturas de Dados
Ciclos e iterações
a_list = []
number_list =[2, 3, 4, 5]
string_list = [
"r",
"rambo",
"noddy",
"pikachu"
]
mix_list = [3, "batman", 4.0]
Ciclos e Listas
For... in?
# a nice and "clean" list of fruits
fruits = [
"raspberry",
"strawberry",
"melon",
"batman"
]
# the classic loop
for fruit in fruits:
# each time, this block content will be run
# with each of the fruits as fruit
print fruit
Ciclos e Listas
Métodos
# a nice and "clean" list of fruits
fruits = [
"raspberry",
"strawberry",
"melon",
"batman"
]
print len(fruits)
print fruits[0]
fruits.sort()
print fruits[0]
enumerate(fruits)
Ciclos e Listas
For... in?
# REMEMBER, FOR was made for LISTS
# (also known as foreach in other languages)
# but what if, instead of seeing it as an iterator that is increased,
# we think of all numbers [1..10]
# remember
for i in [1:10:1]:
print i # for (int i=0; i< 10; i++){ ... }
for i in [1:10:2]:
print i # for (int i=0; i< 10; i=i+2){ ... }
# however, range() is more common
# regular for loops
range(6)
range(1, 7)
range(0, 8, 2)
# key : value pair
# keys are unique
# values are not
settings = {
"difficulty": 3,
"nrLives": 3,
"startingLevel": 1,
"canCheat": False,
"specialPowersAllowed": ["teleportation", "flying", "fireballs"]
}
print settings["nrLives"]
settings["nrLives"] = 50
print settings["nrLives"]
# ITERATE through items and keys
for key in settings:
print "the option %s is set to %s " % (key, settings[key])
Funções
# parametros com valor por defeito
def adicao(x, y=0):
return x + y
adicao(1, 3)
adicao(3) # sim, funciona
fruits = ["banana", "lemon", "apple", "orange", "batman"]
# fruits.sort() # how will it work if there are different types there?
for fruit in fruits:
# each item in the list will now be known as fruits
print "I would like a %s" % fruit
def eat_fruits(fruits):
return [fruit + " eaten" for fruit in fruits]
print eat_fruits(fruits)
Uma função que retorne uma lista de frutas terminada em " eaten"
def eat_fruits(fruits):
return [fruit + " eaten" for fruit in fruits]
print eat_fruits(fruits)
[
"banana",
"apple",
"batman"
]
# tem de passar a...
[
"banana eaten",
"apple eaten",
"batman eaten"
]
Importar funções de outros scripts?
from fruitlib import eat_fruits
eat_fruits(["banana", "apple"])
Criei eat_fruits em fruitlib.py
Lambda?
sum = lambda x, y: x + y
sum(9, 1)
'''
same as
'''
def sum_also(x, y):
return x + y
What do we need this for?
Nothing. Good luck with JavaScript!
Extras
import turtle
# fonte: http://openbookproject.net/thinkcs/python/english3e/hello_little_turtles.html
wn = turtle.Screen()
wn.bgcolor("lightgreen") # Set the window background color
wn.title("Hello, Tess!") # Set the window title
tess = turtle.Turtle()
tess.color("blue") # Tell tess to change her color
tess.pensize(3) # Tell tess to set her pen width
tess.shape("turtle")
tess.forward(50)
tess.left(120)
tess.forward(50)
wn.mainloop()
import turtle
wn = turtle.Screen()
wn.bgcolor("lightgreen")
tess = turtle.Turtle()
tess.shape("turtle")
tess.color("blue")
tess.penup() # This is new
size = 20
for i in range(30):
tess.stamp() # Leave an impression on the canvas
size = size + 3 # Increase the size on every iteration
tess.forward(size) # Move tess along
tess.right(24) # ... and turn her
wn.mainloop()
Classes
# http://www.tutorialspoint.com/python/python_classes_objects.htm
class Employee:
'Common base class for all employees'
empCount = 0
def __init__(self, name, salary):
self.name = name
self.salary = salary
Employee.empCount += 1
def displayCount(self):
print "Total Employee %d" % Employee.empCount
def displayEmployee(self):
print "Name : ", self.name, ", Salary: ", self.salary
# http://www.tutorialspoint.com/python/python_classes_objects.htm
# "This would create first object of Employee class"
emp1 = Employee("Zara", 2000)
# "This would create second object of Employee class"
emp2 = Employee("Manni", 5000)
emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount
# http://www.tutorialspoint.com/python/python_classes_objects.htm
hasattr(emp1, 'age') # Returns true if 'age' attribute exists
getattr(emp1, 'age') # Returns value of 'age' attribute
setattr(emp1, 'age', 8) # Set attribute 'age' at 8
delattr(empl, 'age') # Delete attribute 'age'
A escrever em pt?
#!/usr/bin/python
# -*- coding: utf-8 -*-
By Miguel Costa
Introdução ao Python - Contexto das Linguagens multi-paradigma