Mudanças entre as edições de "Python 2021 Mod2"
Ir para navegação
Ir para pesquisar
(11 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 3: | Linha 3: | ||
;Objetivos de aprendizagem: | ;Objetivos de aprendizagem: | ||
− | + | #Entender a estrutura dos loops for e while e a diferença entre iteração em relação ao index versus elemento. Reconhecer os efeitos do break e continue keywords. <br> | |
− | + | #Construir novas funções e fazer chamadas de funções. Compreender o papel dos parâmetros. | |
+ | |||
==Loops== | ==Loops== | ||
− | |||
=== Loops For/While=== | === Loops For/While=== | ||
Linha 12: | Linha 12: | ||
O Python tem uma implementação/estrutura do loop FOR que funciona tanto para o loop for padrão quanto para o loop for-Each de outras linguagens de programação. | O Python tem uma implementação/estrutura do loop FOR que funciona tanto para o loop for padrão quanto para o loop for-Each de outras linguagens de programação. | ||
− | Existem algumas diferenças estruturais no loop FOR do Python. Considere-as nos exemplos abaixo. | + | ''Existem algumas diferenças estruturais no loop FOR do Python. Considere-as nos exemplos abaixo.'' |
− | |||
+ | <syntaxhighlight lang=python> | ||
""" | """ | ||
A variável **i** serve como o contador sobre RANGE de [0,10), | A variável **i** serve como o contador sobre RANGE de [0,10), | ||
Linha 27: | Linha 27: | ||
for i in range(10): | for i in range(10): | ||
print(i) | print(i) | ||
+ | </syntaxhighlight> | ||
+ | <pre> | ||
0 | 0 | ||
1 | 1 | ||
Linha 38: | Linha 40: | ||
8 | 8 | ||
9 | 9 | ||
+ | </pre> | ||
+ | <syntaxhighlight lang=python> | ||
""" | """ | ||
Estes exemplos especificam um limite inferior que difere do valor padrão de 0. | Estes exemplos especificam um limite inferior que difere do valor padrão de 0. | ||
Linha 52: | Linha 56: | ||
""" | """ | ||
for x in range(2, 10): | for x in range(2, 10): | ||
− | print( | + | print(x) |
+ | </syntaxhighlight> | ||
+ | <pre> | ||
+ | 2 | ||
+ | 3 | ||
+ | 4 | ||
+ | 5 | ||
+ | 6 | ||
+ | 7 | ||
+ | 8 | ||
9 | 9 | ||
− | + | </pre> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | <syntaxhighlight lang=python> | ||
""" | """ | ||
O terceiro parâmetro range() define o número de etapas para incrementar o contador. | O terceiro parâmetro range() define o número de etapas para incrementar o contador. | ||
Linha 72: | Linha 80: | ||
for i in range(0, 10, 3): | for i in range(0, 10, 3): | ||
print(i) | print(i) | ||
+ | </syntaxhighlight> | ||
+ | <pre> | ||
0 | 0 | ||
3 | 3 | ||
6 | 6 | ||
9 | 9 | ||
+ | </pre> | ||
+ | <syntaxhighlight lang=python> | ||
""" | """ | ||
Loop 'for-Each' sobre cada caractere em uma string. | Loop 'for-Each' sobre cada caractere em uma string. | ||
Linha 86: | Linha 98: | ||
for i in "hello!": | for i in "hello!": | ||
print(i) | print(i) | ||
+ | </syntaxhighlight> | ||
+ | <pre> | ||
h | h | ||
e | e | ||
Linha 93: | Linha 107: | ||
o | o | ||
! | ! | ||
+ | </pre> | ||
+ | <syntaxhighlight lang=python> | ||
""" | """ | ||
Poderíamos também iterar sobre a string por indexação. | Poderíamos também iterar sobre a string por indexação. | ||
Linha 105: | Linha 121: | ||
for i in range(0, len(string), 2): | for i in range(0, len(string), 2): | ||
print(str(i) + "th letter is "+ string[i]) | print(str(i) + "th letter is "+ string[i]) | ||
+ | </syntaxhighlight> | ||
+ | <pre> | ||
0th letter is h | 0th letter is h | ||
2th letter is l | 2th letter is l | ||
Linha 112: | Linha 130: | ||
8th letter is r | 8th letter is r | ||
10th letter is d | 10th letter is d | ||
+ | </pre> | ||
A estrutura do loop WHILE permanece em sua maioria idêntica a outras linguagens de programação. | A estrutura do loop WHILE permanece em sua maioria idêntica a outras linguagens de programação. | ||
Linha 117: | Linha 136: | ||
Dê uma olhada no exemplo abaixo | Dê uma olhada no exemplo abaixo | ||
+ | <syntaxhighlight lang=python> | ||
# Nota: sem a atualização da variável no loop while, este será um loop INFINITO!! | # Nota: sem a atualização da variável no loop while, este será um loop INFINITO!! | ||
Linha 125: | Linha 145: | ||
# IMPORTANTE!!! Atualize o contador! | # IMPORTANTE!!! Atualize o contador! | ||
count += 1 | count += 1 | ||
+ | </syntaxhighlight> | ||
+ | <pre> | ||
0 | 0 | ||
1 | 1 | ||
Linha 136: | Linha 158: | ||
8 | 8 | ||
9 | 9 | ||
+ | </pre> | ||
− | + | === Continue/Break Keywords=== | |
Como manipular loops (FOR e WHILE): | Como manipular loops (FOR e WHILE): | ||
− | + | *'''Break''': pular os códigos restantes no loop bem como as iterações remanecentes, quebrar (break) o loop mais interno. | |
− | + | *'''Continue''': pular os códigos restantes no loop e continuar para a próxima iteração do loop. | |
+ | <syntaxhighlight lang=python> | ||
# Considere um programa que ecoe o input do usuário, exceto pelo "end". | # Considere um programa que ecoe o input do usuário, exceto pelo "end". | ||
# Este programa roda infinitamente, exceto quando o usuário insere "end" para terminá-lo. | # Este programa roda infinitamente, exceto quando o usuário insere "end" para terminá-lo. | ||
Linha 156: | Linha 180: | ||
break | break | ||
print(user) | print(user) | ||
+ | </syntaxhighlight> | ||
+ | <pre> | ||
Enter something to be repeated: a | Enter something to be repeated: a | ||
a | a | ||
Linha 163: | Linha 189: | ||
Enter something to be repeated: end | Enter something to be repeated: end | ||
Terminate the program!!! | Terminate the program!!! | ||
+ | </pre> | ||
+ | <syntaxhighlight lang=python> | ||
# Sem usar a palavra-chave "break", esta é outra implementação do mesmo programa de cima usando uma variável. | # Sem usar a palavra-chave "break", esta é outra implementação do mesmo programa de cima usando uma variável. | ||
Linha 174: | Linha 202: | ||
else: | else: | ||
print(user) | print(user) | ||
+ | </syntaxhighlight> | ||
+ | <pre> | ||
Enter something to be repeated: a | Enter something to be repeated: a | ||
a | a | ||
Linha 185: | Linha 215: | ||
Enter something to be repeated: end | Enter something to be repeated: end | ||
Program Ended!!! | Program Ended!!! | ||
+ | </pre> | ||
+ | <syntaxhighlight lang=python> | ||
""" | """ | ||
Vamos considerar um loop que conta de 1-20, mas ignora todos os números que são múltiplos de 5. | Vamos considerar um loop que conta de 1-20, mas ignora todos os números que são múltiplos de 5. | ||
Linha 197: | Linha 229: | ||
# Implementação do loop WHILE | # Implementação do loop WHILE | ||
− | while count | + | while count <= 20: |
if count % 5 == 0: | if count % 5 == 0: | ||
print("SKIP") | print("SKIP") | ||
Linha 204: | Linha 236: | ||
print(count) | print(count) | ||
count += 1 | count += 1 | ||
+ | </syntaxhighlight> | ||
+ | <pre> | ||
1 | 1 | ||
2 | 2 | ||
Linha 224: | Linha 258: | ||
18 | 18 | ||
19 | 19 | ||
+ | SKIP | ||
+ | </pre> | ||
+ | <syntaxhighlight lang=python> | ||
# Implementação do loop FOR | # Implementação do loop FOR | ||
Linha 232: | Linha 269: | ||
continue | continue | ||
print(i) | print(i) | ||
+ | </syntaxhighlight> | ||
+ | <pre> | ||
1 | 1 | ||
2 | 2 | ||
Linha 252: | Linha 291: | ||
18 | 18 | ||
19 | 19 | ||
+ | </pre> | ||
− | + | == Funções== | |
− | Funções são úteis quando lhe é dado um problema que pode ser dividido em várias etapas e algumas etapas são usadas de forma repetitiva. Então, ter uma função para essas etapas é conveniente porque reduz a repetição de código e torna o código mais organizado. | + | '''Funções''' são úteis quando lhe é dado um problema que pode ser dividido em várias etapas e algumas etapas são usadas de forma repetitiva. Então, ter uma função para essas etapas é conveniente porque reduz a repetição de código e torna o código mais organizado. |
Notas sobre a definição de uma nova função: | Notas sobre a definição de uma nova função: | ||
− | + | # Definir/inicializar uma nova função com a palavra-chave def antes do nome da função. | |
− | + | # NÃO definir o tipo de retorno na declaração da função. | |
− | + | # NÃO esquecer do parâmetro da função se sua função precisar de informações do main() ou de outras funções. | |
− | + | # A declaração RETURN não é necessária, dependendo das funções. | |
+ | <syntaxhighlight lang=python> | ||
""" | """ | ||
Escreveremos nossa própria função que testa se um triângulo de 3 lados é um triângulo retângulo. | Escreveremos nossa própria função que testa se um triângulo de 3 lados é um triângulo retângulo. | ||
Linha 309: | Linha 350: | ||
if __name__ == "__main__": | if __name__ == "__main__": | ||
main() | main() | ||
+ | </syntaxhighlight> | ||
+ | <pre> | ||
Enter the length for the first edge of the triangle:5 | Enter the length for the first edge of the triangle:5 | ||
Enter the length for the second edge of the triangle:4 | Enter the length for the second edge of the triangle:4 | ||
Enter the length for the last edge of the triangle:3 | Enter the length for the last edge of the triangle:3 | ||
Right Triangle | Right Triangle | ||
+ | </pre> | ||
+ | <syntaxhighlight lang=python> | ||
""" | """ | ||
Outro exemplo: determinar se a entrada do usuário é um palíndromo. | Outro exemplo: determinar se a entrada do usuário é um palíndromo. | ||
Linha 364: | Linha 409: | ||
if __name__ == "__main__": | if __name__ == "__main__": | ||
main() | main() | ||
+ | </syntaxhighlight> | ||
+ | <pre> | ||
Enter a sentence to be tested as a palindrome:racecar | Enter a sentence to be tested as a palindrome:racecar | ||
racecar is a palindrome! | racecar is a palindrome! | ||
+ | </pre> | ||
+ | <syntaxhighlight lang=python> | ||
# Considere esta implementação da função que RETURN (retorna) uma string. | # Considere esta implementação da função que RETURN (retorna) uma string. | ||
# Anote a diferença entre main() e isPalindrom() após esta mudança. | # Anote a diferença entre main() e isPalindrom() após esta mudança. | ||
Linha 388: | Linha 437: | ||
if __name__ == "__main__": | if __name__ == "__main__": | ||
main() | main() | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | <syntaxhighlight lang=python> | ||
""" | """ | ||
Acima trabalhamos com um exemplo que testa se uma sentença é um palíndromo. | Acima trabalhamos com um exemplo que testa se uma sentença é um palíndromo. | ||
Agora é a sua vez. | Agora é a sua vez. | ||
− | Exercício: escreva uma função para testar se uma palavra do usuário é um palíndromo. | + | ;Exercício: escreva uma função para testar se uma palavra do usuário é um palíndromo. |
As declarações de função são fornecidas para você. | As declarações de função são fornecidas para você. | ||
Linha 413: | Linha 465: | ||
if __name__ == "__main__": | if __name__ == "__main__": | ||
main() | main() | ||
+ | </syntaxhighlight> | ||
− | NÃO VEJA A SOLUÇÃO | + | {{collapse top|NÃO VEJA A SOLUÇÃO ANTES DE TENTAR FAZER O EXERCÍCIO!}} |
− | + | <syntaxhighlight lang=python> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
# Uma implementação de solução para o exercício acima. | # Uma implementação de solução para o exercício acima. | ||
Linha 463: | Linha 490: | ||
if __name__ == "__main__": | if __name__ == "__main__": | ||
main() | main() | ||
+ | </syntaxhighlight> | ||
+ | <pre> | ||
Enter a WORD to be tested as a palindrome:racecar | Enter a WORD to be tested as a palindrome:racecar | ||
racecar is a palindrome! | racecar is a palindrome! | ||
+ | </pre> | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | |||
----- | ----- | ||
[[Imagem:icone_voltar.png|link=Python_2021_Mod1]] | [[Imagem:icone_voltar.png|link=Python_2021_Mod1]] | ||
− | [[Imagem:icone_menu.png|link= | + | [[Imagem:icone_menu.png|link=Python2021]] |
[[Imagem:icone_prox.png|link=Python_2021_Mod3]] | [[Imagem:icone_prox.png|link=Python_2021_Mod3]] |
Edição atual tal como às 16h24min de 28 de dezembro de 2021
Módulo 2: Loops, Funções
- Objetivos de aprendizagem
- Entender a estrutura dos loops for e while e a diferença entre iteração em relação ao index versus elemento. Reconhecer os efeitos do break e continue keywords.
- Construir novas funções e fazer chamadas de funções. Compreender o papel dos parâmetros.
Loops
Loops For/While
O Python tem uma implementação/estrutura do loop FOR que funciona tanto para o loop for padrão quanto para o loop for-Each de outras linguagens de programação.
Existem algumas diferenças estruturais no loop FOR do Python. Considere-as nos exemplos abaixo.
"""
A variável **i** serve como o contador sobre RANGE de [0,10),
inclusive do limite inferior, mas exclusive do limite superior.
O limite inferior de 0 NÃO precisa ser especificado;
ele é implementado por padrão, a menos que outro limite inferior seja especificado.
Também, por padrão, se NÃO existir um terceiro parâmetro para range(),
então **i** aumenta em 1.
"""
for i in range(10):
print(i)
0 1 2 3 4 5 6 7 8 9
"""
Estes exemplos especificam um limite inferior que difere do valor padrão de 0.
A ordem do parâmetro é SEMPRE:
1. Posição inicial, inclusive
2. Posição de parada, exclusive
3. Valor incremental
Neste exemplo, x começa com o valor igual a 2 e para em 9 inclusive, ou seja, 10 exclusive,
com x acréscimos de 1 para cada iteração.
"""
for x in range(2, 10):
print(x)
2 3 4 5 6 7 8 9
"""
O terceiro parâmetro range() define o número de etapas para incrementar o contador.
Neste exemplo, x começa com o valor igual a 0 e para em 9 inclusive, ou 10 exclusive,
com x incrementos de 3 para cada iteração.
"""
for i in range(0, 10, 3):
print(i)
0 3 6 9
"""
Loop 'for-Each' sobre cada caractere em uma string.
Neste exemplo, a variável 'i' representa cada elemento/caractere de 'hello'.
"""
for i in "hello!":
print(i)
h e l l o !
"""
Poderíamos também iterar sobre a string por indexação.
Considere o seguinte exemplo de iteração sobre a string por index,
começando no índex 0 e terminando no último elemento, com os incrementos do contador em 2,
portanto, imprimindo APENAS todos os outros elementos da string.
"""
string = "hello world!"
for i in range(0, len(string), 2):
print(str(i) + "th letter is "+ string[i])
0th letter is h 2th letter is l 4th letter is o 6th letter is w 8th letter is r 10th letter is d
A estrutura do loop WHILE permanece em sua maioria idêntica a outras linguagens de programação.
Dê uma olhada no exemplo abaixo
# Nota: sem a atualização da variável no loop while, este será um loop INFINITO!!
count = 0
while (count < 10):
print(count)
# IMPORTANTE!!! Atualize o contador!
count += 1
0 1 2 3 4 5 6 7 8 9
Continue/Break Keywords
Como manipular loops (FOR e WHILE):
- Break: pular os códigos restantes no loop bem como as iterações remanecentes, quebrar (break) o loop mais interno.
- Continue: pular os códigos restantes no loop e continuar para a próxima iteração do loop.
# Considere um programa que ecoe o input do usuário, exceto pelo "end".
# Este programa roda infinitamente, exceto quando o usuário insere "end" para terminá-lo.
while True:
user = input("Enter something to be repeated: ")
## Quando o "break" é acionado, o print() abaixo NÃO será executado.
## O programa romperá o loop quando esta palavra-chave for lida.
if user=="end":
print("Terminate the program!!!")
break
print(user)
Enter something to be repeated: a a Enter something to be repeated: g g Enter something to be repeated: end Terminate the program!!!
# Sem usar a palavra-chave "break", esta é outra implementação do mesmo programa de cima usando uma variável.
end = False
while end == False:
user = input("Enter something to be repeated: ")
if user=="end":
print("Program Ended!!!")
end = True
else:
print(user)
Enter something to be repeated: a a Enter something to be repeated: f f Enter something to be repeated: h h Enter something to be repeated: d d Enter something to be repeated: end Program Ended!!!
"""
Vamos considerar um loop que conta de 1-20, mas ignora todos os números que são múltiplos de 5.
Neste caso, NÃO poderíamos usar a palavra-chave "break", porque isso encerrará o loop.
Queremos "continuar" o loop, exceto por alguns números.
Vamos implementar isto tanto com um loop "while" quanto com um loop "for".
"""
count = 1
# Implementação do loop WHILE
while count <= 20:
if count % 5 == 0:
print("SKIP")
count += 1
continue
print(count)
count += 1
1 2 3 4 SKIP 6 7 8 9 SKIP 11 12 13 14 SKIP 16 17 18 19 SKIP
# Implementação do loop FOR
for i in range (1, 20):
if i % 5 == 0:
print("SKIP")
continue
print(i)
1 2 3 4 SKIP 6 7 8 9 SKIP 11 12 13 14 SKIP 16 17 18 19
Funções
Funções são úteis quando lhe é dado um problema que pode ser dividido em várias etapas e algumas etapas são usadas de forma repetitiva. Então, ter uma função para essas etapas é conveniente porque reduz a repetição de código e torna o código mais organizado.
Notas sobre a definição de uma nova função:
- Definir/inicializar uma nova função com a palavra-chave def antes do nome da função.
- NÃO definir o tipo de retorno na declaração da função.
- NÃO esquecer do parâmetro da função se sua função precisar de informações do main() ou de outras funções.
- A declaração RETURN não é necessária, dependendo das funções.
"""
Escreveremos nossa própria função que testa se um triângulo de 3 lados é um triângulo retângulo.
Como não podemos controlar a ordem dos lados que o usuário nos dá (de tal forma que C é o comprimento mais longo),
precisamos verificar manualmente se C é o comprimento mais longo (os comprimentos A e B podem estar em qualquer ordem).
Caso contrário, nosso teorema de Pitágoras falhará.
"""
def isRightTriangle(a, b, c):
# Reatribuir valores variáveis para garantir que C seja o comprimento mais longo
if (max(a,b,c) != c):
# tmp armazena os valores anteriores de C, que não é o comprimento mais longo
tmp = c
c = max(a,b,c)
if a == c:
a = tmp
elif b == c:
b = tmp
# Aplicar a fórmula
if a**2 + b**2 == c**2:
print("Right Triangle")
# Se o programa vê uma declaração Return, este é o FIM do programa/função
return True
# Estas duas linhas funcionarão SOMENTE quando a condição IF for falsa
print("NOT a right triangle")
return False
# Solicite ao usuário que insira 3 comprimentos
def main():
a = input("Enter the length for the first edge of the triangle:")
b = input("Enter the length for the second edge of the triangle:")
c = input("Enter the length for the last edge of the triangle:")
# As entradas do usuário são armazenadas como uma string, então nós as computamos para ser int
return isRightTriangle(int(a), int(b), int(c))
if __name__ == "__main__":
main()
Enter the length for the first edge of the triangle:5 Enter the length for the second edge of the triangle:4 Enter the length for the last edge of the triangle:3 Right Triangle
"""
Outro exemplo: determinar se a entrada do usuário é um palíndromo.
Palíndromo: se uma palavra/sentença é soletrada da mesma maneira quando é invertida.
EX: racecar (carro de corrida)
Para este exemplo, vamos tornar isto de forma mais abrangente.
Em vez de verificar se uma palavra é um palíndromo, vamos testar se uma frase é um palíndromo.
A fim de escrever este programa, estabeleceremos algumas especificações:
- Tratar as letras maiúsculas como minúsculas
- Ignorar todos os espaços brancos e pontuações
- Uma sentença/string vazia é considerada como um palíndromo.
"""
# importar o pacote de string
# Revisaremos mais pacotes/bibliotecas no Módulo 5
import string
# Esta implementação da função RETURN (retornar) um valor booleano, True/False (Verdadeiro/Falso)
def isPalindrome(str):
# Como não conseguimos controlar o que o usuário insere na sentença, vamos esclarecer primeiro a sentença.
# Vamos remover todas as pontuações e espaços brancos da sentença e colocar todas as letras em minúsculo
exclude = set(string.punctuation)
str = ''.join(ch for ch in str if ch not in exclude)
str = str.replace(" ", "").lower()
# Comparar a string original com a string em ordem inversa
# Observação de str[::-1]: os dois primeiros números definem o início e o fim da string, o último número de -1 indica a ordem inversa
# Verificar se a string é a mesma tanto em ordem invertida quanto na ordem original
if str == str[::-1]:
return True
else:
return False
# Solicitar ao usuário que introduza a sentença
def main():
userSentence = input("Enter a sentence to be tested as a palindrome:")
if (isPalindrome(userSentence)):
print(userSentence + " is a palindrome!")
else:
print(userSentence + " is NOT a palindrome!")
if __name__ == "__main__":
main()
Enter a sentence to be tested as a palindrome:racecar racecar is a palindrome!
# Considere esta implementação da função que RETURN (retorna) uma string.
# Anote a diferença entre main() e isPalindrom() após esta mudança.
import string
def isPalindrome(str):
exclude = set(string.punctuation)
str = ''.join(ch for ch in str if ch not in exclude)
str = str.replace(" ", "").lower()
if str == str[::-1]:
return str + " is a palindrome!"
else:
return str + " is NOT a palindrome!"
def main():
userSentence = input("Enter a sentence to be tested as a palindrome:")
print(isPalindrome(userSentence))
if __name__ == "__main__":
main()
"""
Acima trabalhamos com um exemplo que testa se uma sentença é um palíndromo.
Agora é a sua vez.
;Exercício: escreva uma função para testar se uma palavra do usuário é um palíndromo.
As declarações de função são fornecidas para você.
"""
def isPalindrome(str):
# Solicitar que o usuário digite a sentença
def main():
userInput = input("Enter a WORD to be tested as a palindrome:")
if (isPalindrome(userInput)):
print(userInput + " is a palindrome!")
else:
print(userInput + " is NOT a palindrome!")
if __name__ == "__main__":
main()
NÃO VEJA A SOLUÇÃO ANTES DE TENTAR FAZER O EXERCÍCIO! |
---|
# Uma implementação de solução para o exercício acima.
def isPalindrome(str):
str = str.lower()
if (str == str[::-1]):
return True
else:
return False
# Solicitar ao usuário que introduza a sentença
def main():
userInput = input("Enter a WORD to be tested as a palindrome:")
if (isPalindrome(userInput)):
print(userInput + " is a palindrome!")
else:
print(userInput + " is NOT a palindrome!")
if __name__ == "__main__":
main()
Enter a WORD to be tested as a palindrome:racecar racecar is a palindrome! |