Python 2021 Mod2

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

Módulo 2: Loops, Funções

Objetivos de aprendizagem
  1. 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.
  2. 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:

  1. Definir/inicializar uma nova função com a palavra-chave def antes do nome da função.
  2. NÃO definir o tipo de retorno na declaração da função.
  3. NÃO esquecer do parâmetro da função se sua função precisar de informações do main() ou de outras funções.
  4. 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!



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