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: \\
>>> palavra = 'a1b2c3d' >>> print(troca(palavra)) 1a2b3cdImplemente 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.
def troca(pal): """Os caracteres nas posições pares passam para ímpares e os nas posições ímpares passam para as posiçõesp pares.""" pares = pal[::2] impares = pal[1::2] nova_pal = '' for i in range(len(pal)//2): nova_pal += impares[i] + pares[i] if len(pal)%2 != 0: nova_pal += pares[-1] return nova_palP3
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:\\
>>> img = [[1,1,1,1,1],[1,1,1,1,1],[1,1,1,1,1],[1,1,1,1,1]] >>> sup = (1,2) >>> inf = (3,4) >>> print(limpar(img,sup,inf)) [[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.
def limpar(imagem, sup_esq,inf_dir): """ Limpa a imagem entre o canto superior esaquerdo e o canto superior direito.""" # verifica se é possível num_linhas = len(imagem) num_colunas = len(imagem[0]) possivel_linhas = (sup_esq[0] <= inf_dir[0] <= num_linhas ) possivel_colunas = (sup_esq[1] <= inf_dir[1] <= num_colunas) if possivel_linhas and possivel_colunas: for linha in range(sup_esq[0], inf_dir[0]+1): for coluna in range(sup_esq[1],inf_dir[1]+1): imagem[linha][coluna] = 0 return imagem
Sem comentários:
Enviar um comentário