Python Dicas e Trechos de Código (Snippets) – Parte 10

Aqui ficam mais uma série de exercícios resolvidos.

Efetuar todas as permutações possíveis a partir de uma string.

Para efetuar permutações existe um método chamado permutations do módulo itertools, que possuí a seguinte sintaxe:

itertools.permutations(iterable[, r])

A seguir fica aqui o uso do mesmo através de um exercício:


Dada um string S.
O objectivo é imprimir todas as possíveis permutações de tamanho K da string, mas ordenadas de forma lexicográfica.


 Input:
 HACK 2


Output:
AC
AH
AK
CA
CH
CK
HA
HC
HK
KA
KC
KH

 

Solução:

v = input().split()

permuted = list(permutations(list(v[0]), int(v[1])))
permuted_join = [''.join(p) for p in permuted]
print(*(p for p in sorted(permuted_join)), sep='\n')

O método map().

O método map requer uma função para ser executado por cada item. Requer também uma colecção  ou um objecto iterador.

Usando o método map(), tente resolver o seguinte exercício:

Tendo duas listas do mesmo tamanho que contém números (list_1 e list_2). Defina uma função function my_product(list_1, list_2) que vai criar uma nova lista e devolve-la com o produto das listas. Neste contexto o que se pretende é que se multiplique o primeiro elemento da lista list_1 pelo primeiro elemento da lista list_2 e assim de seguida para os restantes elementos seguintes.

Solução:

 

def my_product(list_1, list_2):
    return list(map(lambda x, y: x * y, list_1, list_2))

foo=[1,2,3,4]
bar=[1,2,5,55]
print(my_product(foo, bar))  # [1, 4, 15, 220]

Exemplo do uso de leitura e escrita simultânea em ficheiros diferentes.

Dado um ficheiro onde estão os valores de salários de um mês de cada funcionário da empresa, crie um novo ficheiro com o valor dos salários de um ano.

Para este exercício crie primeiro um ficheiro com os salários ‘salary.txt’ e adicione valores mensais, exemplo:

1200
1350
890
4500
2100

Solução:

with open('salary.txt') as read_salaries, open('salary_year.txt', 'w') as salaries_year:
    for salary in read_salaries:
        salary_year = int(salary) * 12
        salaries_year.write(str(salary_year) + '\n')

Recursividade.

Neste exercício imaginemos que todas as máquinas enlouqueceram e que uma simples multiplicação não funciona para os números naturais. Objectivo é criar uma função recursiva para a resolução deste problema.

É sabido que “a vezes b” é o mesmo que “a mais a o número de vezes de b”, ou seja, podemos reescrever a expressão da seguinte forma:

a∗b=a+a+a+a+…+a

É necessário reduzir o problema a um problema menor com o uso de recursão e parar a recursão com a condição de base.

Neste exercício só serão aceites dois inteiros positivos.

Solução:

def multiply(a, b):
    if b == 1:  # base case
        return a
    # recursive case
    return a + multiply(a, b - 1)

num_1, num_2 = input().split()

print(multiply(int(num_1), int(num_2)))

Leave a Reply