|
| 1 | +# Challenge #4 - Probabilidade |
| 2 | +#Constantes que representam as diferentes faces da moeda |
| 3 | +T = "T" |
| 4 | +H = "H" |
| 5 | + |
| 6 | +# função para calcular todas permutações possíveis |
| 7 | +# Todas as permutações são postas num array |
| 8 | +#limit: é o número de lançamentos e limita o |
| 9 | +# tamanho da string. Ex: p/ limit = 2, as strings geradas são |
| 10 | +# HT,TT,TH,HH |
| 11 | +# perms: é o array que armazena as permutações |
| 12 | +# current: armazena o estado da string que formará a |
| 13 | +#próxima permutação. inicialmente é uma string vazia |
| 14 | +#depth: controla a profundidade da recursão |
| 15 | +def get_perms(limit,perms,current="",depth=0): |
| 16 | + # 1. Verificar se atingimos o caso base da recursão |
| 17 | + if depth == limit: |
| 18 | + #se sim, a string actual é uma permutação válida |
| 19 | + # e é adicionada ao array de permutações |
| 20 | + perms.append(current) |
| 21 | + return |
| 22 | + |
| 23 | + # 2. Chamar de forma recursiva get_perms modificando |
| 24 | + # a string actual com as variações possíveis (T e H). |
| 25 | + get_perms(limit,perms,current+T,depth+1) |
| 26 | + get_perms(limit,perms,current+H,depth+1) |
| 27 | + |
| 28 | + |
| 29 | +# 1. receber o número de lançamentos do usuário |
| 30 | +flips = int(input("input: ")) |
| 31 | + |
| 32 | + |
| 33 | +# 2. Gerar todas as permutações de 'H' e 'T' com base no número de |
| 34 | +# lançamentos. Ex: para flips = 3 teriamos: TTT, THT, TTH ... |
| 35 | +#o número total de resultados é sempre 2^flips |
| 36 | +results = [] |
| 37 | +#a função get_perms gera os resultados e adiciona-os ao array |
| 38 | +get_perms(flips,results) |
| 39 | + |
| 40 | + |
| 41 | +# 3. Contar o número de resultados com dois 'H's |
| 42 | +#seguidos |
| 43 | +count = 0 |
| 44 | + |
| 45 | +for result in results: |
| 46 | + #verifica cada resultado |
| 47 | + # e procura pelo padrão 'HH' em qualquer |
| 48 | + # posição na string |
| 49 | + if "HH" in result: |
| 50 | + count +=1 |
| 51 | + |
| 52 | +# 4. Calcular e mostrar a probabilidade para o usuário |
| 53 | +# Lembrando que a probabilidade = x/y |
| 54 | +# onde x -> acontecimentos favoráveis (quantidade de resultados sem 'HH') = tamanho(resultados) - quantidade_de_res_com_HH |
| 55 | +# onde y -> todos acontecimentos possíveis (quantidade de resultados) = tamanho(resultados) |
| 56 | +print(f"ouput: {(len(results)-count)/len(results)}") |
0 commit comments