sexta-feira, 15 de dezembro de 2017

Teste # 2 - Especial

P2

Suponha que tem uma palavra e pretende criar uma outra de maneira que os caracteres da palavra inicial nas posições pares passam para as posições ímpares na nova palavra, e os caracteres das posições ímpares da palavra inicial passam para as posições pares da nova palavra. Por exemplo: \\
1.>>> palavra = 'a1b2c3d'
2.>>> print(troca(palavra))
3.1a2b3cd
Implemente o respectivo programa.

A solução adoptada começa por dividir a palavra nos seus elementos pares e nos ímpares. Depois, num ciclo, constrói-se a nova palavra. Finalmente, verifica-se o caso do tamanho ser ímpar o que o briga a acrescentar o último elemento na posição par, que não foi introduzido no ciclo.
01.def troca(pal):
02.    """Os caracteres nas posições pares passam para ímpares e os nas posições ímpares passam para as posiçõesp pares."""
03.    pares = pal[::2]
04.    impares = pal[1::2]
05.    nova_pal = ''
06.    for i in range(len(pal)//2):
07.        nova_pal += impares[i] + pares[i]
08.    if len(pal)%2 != 0:
09.        nova_pal += pares[-1]
10.    return nova_pal
P3

Suponha que tem uma imagens a preto e branco e que pretende limpar uma parte da imagem, ou seja, colocar os pixeis dessa parte todos a branco. A zona a limpar é dada por dois pontos, o canto superior esquerdo e o canto superior direito. Por exemplo:\\
1.>>> img = [[1,1,1,1,1],[1,1,1,1,1],[1,1,1,1,1],[1,1,1,1,1]]
2.>>> sup = (1,2)
3.>>> inf = (3,4)
4.>>> print(limpar(img,sup,inf))
5.[[1, 1, 1, 1, 1], [1, 1, 0, 0, 0], [1, 1, 0, 0, 0], [1, 1, 0, 0, 0]]
Implemente o respectivo programa.

A solução apresentada percorre todas a matriz de modo usual, por linhas e para cada linha por colunas, limitando as coordenadas ai interior do rectângulo definido pelo canto inferior esquerdo e santo superior direito, muda os piteis para zero (branco). Antes de proceder à alteração, verifica se a operação é possível.
01.def limpar(imagem, sup_esq,inf_dir):
02.    """ Limpa a imagem entre o canto superior esaquerdo e o canto superior direito."""
03.    # verifica se é possível
04.    num_linhas = len(imagem)
05.    num_colunas = len(imagem[0])
06.    possivel_linhas = (sup_esq[0] <= inf_dir[0] <= num_linhas )
07.    possivel_colunas = (sup_esq[1] <= inf_dir[1] <= num_colunas)
08.    if possivel_linhas and possivel_colunas:
09.        for linha in range(sup_esq[0], inf_dir[0]+1):
10.            for coluna in range(sup_esq[1],inf_dir[1]+1):
11.                imagem[linha][coluna] = 0
12.    return imagem

Sem comentários:

Enviar um comentário