Mudanças entre as edições de "Python 2021 Mod2"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
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>
+
*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.
+
*Construir novas funções e fazer chamadas de funções. Compreender o papel dos parâmetros.
 
==Loops==
 
==Loops==
  

Edição das 15h51min 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(i)

9 9 9 9 9 9 9 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

  1. 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.
  1. Considere um programa que ecoe o input do usuário, exceto pelo "end".
  2. 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!!!

  1. 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

  1. Implementação do loop WHILE

while count + 1 <= 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

  1. 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


  1. 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. 

"""

  1. importar o pacote de string
  2. Revisaremos mais pacotes/bibliotecas no Módulo 5

import string


  1. 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
  1. 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!

  1. Considere esta implementação da função que RETURN (retorna) uma string.
  2. 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):


  1. 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 ABAIXO ANTES DE TENTAR FAZER O EXERCÍCIO!

NÃO VEJA A SOLUÇÃO ABAIXO ANTES DE TENTAR FAZER O EXERCÍCIO!

NÃO VEJA A SOLUÇÃO ABAIXO ANTES DE TENTAR FAZER O EXERCÍCIO!

NÃO VEJA A SOLUÇÃO ABAIXO ANTES DE TENTAR FAZER O EXERCÍCIO!

NÃO VEJA A SOLUÇÃO ABAIXO ANTES DE TENTAR FAZER O EXERCÍCIO!

NÃO VEJA A SOLUÇÃO ABAIXO ANTES DE TENTAR FAZER O EXERCÍCIO!

NÃO VEJA A SOLUÇÃO ABAIXO ANTES DE TENTAR FAZER O EXERCÍCIO!

NÃO VEJA A SOLUÇÃO ABAIXO ANTES DE TENTAR FAZER O EXERCÍCIO!

NÃO VEJA A SOLUÇÃO ABAIXO ANTES DE TENTAR FAZER O EXERCÍCIO!

NÃO VEJA A SOLUÇÃO ABAIXO ANTES DE TENTAR FAZER O EXERCÍCIO!

NÃO VEJA A SOLUÇÃO ABAIXO ANTES DE TENTAR FAZER O EXERCÍCIO!

NÃO VEJA A SOLUÇÃO ABAIXO ANTES DE TENTAR FAZER O EXERCÍCIO!

NÃO VEJA A SOLUÇÃO ABAIXO ANTES DE TENTAR FAZER O EXERCÍCIO!

NÃO VEJA A SOLUÇÃO ABAIXO ANTES DE TENTAR FAZER O EXERCÍCIO!

  1. 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


  1. 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!


Icone voltar.png Icone menu.png Icone prox.png