Aula Prática 4 — Objetos

Esta aula tem como objetivo experimentar a criação e manipulação de objetos. Após a realização da prática, deverá ter sido adquirida uma noção básica dos seguintes conceitos:

  • Objeto
  • Construção de um objeto
  • Operações de um objeto (funções e procedimentos)
  • Estado de um objeto
  • Tipo de um objeto

Trabalho prévio

Desenvolva um módulo com funções e procedimentos que permitam:

1. Escrever no ecrã uma cadeia de caracteres de forma a que cada carácter apareça numa linha.

    print_one_letter_per_line('HAL')
    H
    A
    L
In [1]:
def print_one_letter_per_line(s):
    i = 0
    while i < len(s):
        print(s[i])
        i = i + 1

2. Devolver o módulo de um número complexo.

O módulo de um número complexo obtém-se fazendo a raiz quadrada da soma do quadrado da parte real com o quadrado da parte imaginária. Exemplo:

    modulus(2 + 3j) ➝ 3,6
In [2]:
def modulus(c):
    return (c.real ** 2 + c.imag ** 2) ** (1 / 2)

Exercícios

1. Defina um procedimento que dada uma cadeia de caracteres escreve no ecrã essa cadeia de caracteres de forma a que cada carácter apareça numa linha, por ordem inversa.

Exemplo:

    print_one_letter_per_line_inverted('GOD')
    D
    O
    G
In [3]:
def print_one_letter_per_line_inverted(s):
    i = len(s) - 1
    while i >= 0:
        print(s[i])
        i = i - 1

2. Defina uma função que dada uma cadeia de caracteres devolva o número de letras maiúsculas que esta contém.

O tipo cadeia de caracteres (str) tem uma função que devolve verdadeiro caso todos os caracteres de uma cadeia de caracteres sejam maiúsculas — isupper().

In [ ]:
def maiusculas(s):
    return s.isupper()

3. Defina os procedimentos e as funções necessárias para jogar o jogo do enforcado.

No jogo do enforcado, o jogador tem de adivinhar uma palavra que desconhece perguntado em cada jogada se uma dada letra existe na palavra. Sempre que a letra pedida existe na palavra é mostrada a palavra com todas as letras que pedidas que estavam correctas. Sempre que a letra não existe é contabilizada uma tentativa errada. O jogador tem um determinado número de tentativas erradas para adivinhar a palavras. Se ultrapassar esse número de tentativas, perde. Para jogar o jogo deve invocar o procedimento play_hangman() como abaixo.

    play_hangman('Programming', 5)

    Adivinhe a palavra: ___________
    Letra:  a
    Adivinhe a palavra: _____a_____
    Letra:  m
    Adivinhe a palavra: _____amm___
    Letra:  p
    Errou, já só faltam 4 tentativas
    Adivinhe a palavra: _____amm___
In [4]:
def get_mask(word):
    '''
    cria uma string preenchida com _ com o mesmo cumprimento de word
    '''
    i = 0
    mask = ""
    while i < len(word):
        mask = mask + "_"
        i = i + 1
    return mask


def letter_to_mask(word, mask, letra):
    '''
    :param word: palavra a adivinhar
    :param mask: letras já adivinhadas
    :param letra: nova letra a colocar nas letras adivinhadas
    :return: nova máscara com as letras adivinhadas até agora
    '''
    i = 0
    newmask = ""
    while i < len(word):
        if word[i] == letra:
            newmask = newmask + word[i]
        else:
            newmask = newmask + mask[i]
        i = i + 1
    return newmask


def play_hangman(s, tries):
    mask = get_mask(s)
    while tries > 0:
        print("Adivinhe a palavra:", mask)
        letra = input("Letra: ")
        if s.count(letra) > 0:
            mask = letter_to_mask(s, mask, letra)
            if mask == s:
                print("Acertou: ", s)
                return
        else:
            tries = tries - 1
            if tries > 0:
                print("Errou, já só faltam", tries, "tentativas")
            else:
                print("Perdeu")


play_hangman('Programming', 5)
Adivinhe a palavra: ___________
Adivinhe a palavra: _____a_____
Adivinhe a palavra: _____amm___
Errou, já só faltam 4 tentativas
Adivinhe a palavra: _____amm___
Adivinhe a palavra: _r__ramm___
Adivinhe a palavra: Pr__ramm___
Adivinhe a palavra: Pro_ramm___
Adivinhe a palavra: Programm__g
Adivinhe a palavra: Programmi_g
Acertou:  Programming
In [ ]: