Boa noite, estou fazendo um codigo que tem que ter calculo de porcentagem sobre o resultado de uma votação podem me dar uma luz?

Estou fazendo um codigo para fazer uma pesquisa em uma rua, no codigo tem que dizer quais canais as pessoas assistem em casa(as opções são entre canal 2, 4, 7 e 9) e por fim tem que dizer a porcentagem de cada canal baseado no número de casas na rua (esse número de casas é indeterminado e é inserido na hora) e no final tem que indicar qual canal é o mais assistido. No momento eu fiz a linha de codigo como se fosse uma votação, mas agr eu to perdido quanto ao cálculo de porcentagem e em como dizer qual a mais assistida, eu queria também colocar a codinção de se a tv está ligada ou não.

SEGUE O PROGRAMA:

def pesquisa_audiencia (canal):
global canal_cultura, canal_globo, canal_band, canal_record
if canal.isalpha():
if canal== ‘Encerrar’:
print(‘Encerrado’)
print_resultados()

elif canal.isalnum():
    if canal == '2' or canal == 'Cultura' or canal == '4' or canal == 'Globo' or canal == '7' or canal == 'Band' or canal == '9' or canal == 'Record':
        if canal == '2' or canal == 'Cultura':
            canal_cultura +=1
        elif canal == '4' or canal == 'Globo':
            canal_globo +=1
        elif canal == '7' or canal == 'Band':
            canal_band +=1
        elif canal == '9' or canal == 'Record':
            canal_record +=1

def print_resultados():
global canal_cultura, canal_globo, canal_band, canal_record

print('Porcentagem de Audiência por canal:\n')
print('Canal 2:' + str(canal_cultura( ))
print('Canal 4:' + str(canal_globo))
print('Canal 7:' + str(canal_band))
print('Canal 9:' + str(canal_record))


exit()

if name == ‘main’:
canal_cultura = 0
canal_globo = 0
canal_band = 0
canal_record = 0

while True:
    if
    canal = input('Qual canal estão assistindo neste momento em sua casa?')
    pesquisa_audiencia(canal)

Ter um contador para cada canal pode até ser mais simples agora, mas e se você quiser aumentar para 5 canais? Ou 10? Ou 200? Ficará inviável ter uma variável para cada um, além disso a lista de if's ficará enorme.

Em vez disso, use as estruturas de dados adequadas para isso. Python tem dicionários para isso, e para contabilizar os votos, existe um dicionário especializado chamado Counter.

Além disso, o while tem que ter uma condição de saída, senão ficará repetindo para sempre. Eu fiz um exemplo abaixo que ele para assim que o usuário digita somente ENTER.

E para calcular a porcentagem, você precisa saber o total de votos (fiz isso usando os dados do próprio Counter).

Ficaria assim:

from collections import Counter

# dicionário que mapeia cada número para seu respectivo canal
canais = {
    '2': 'Cultura',
    '4': 'Globo',
    '7': 'Band',
    '9': 'Record'
}

# Counter que contabiliza os votos de cada canal
contagem = Counter()

while True:
    # mostra os canais existentes
    print('Canais:')
    for numero, nome in canais.items():
        print(f'{numero} - {nome}')

    canal = input("Qual canal vc está assistindo? (digite somente ENTER para terminar) ")
    if not canal: # se só digitou ENTER, a string 'canal' será vazia e entrará neste if
        break # interrompe o loop
    elif canal in canais.keys() or canal in canais.values(): # se digitou o número ou o nome
        if not canal.isdigit(): # não é número, então digitou o nome
            # procura pelo número do canal
            for numero, nome in canais.items():
                if nome == canal:
                    canal = numero
                    break
        # atualiza a contagem do canal
        contagem.update([canal])
    else:
        print('Esse canal não existe')

# total de votos
total = sum(contagem.values())

# imprime as quantidades de cada canal
for canal, votos in contagem.items():
    # usei f-string, que já formata a porcentagem com 2 casas decimais
    print(f'{canais[canal]} teve {votos} votos, representa {votos / total:.2%} do total')

Assim, se mudar a lista de canais, basta atualizar o dicionário canais - o resto do código permanece igual, pois o Counter já terá as quantidades de cada canal, mapeado pelo seu respectivo número. Isso é melhor do que ter uma variável para cada canal.

1 curtida

Caraca valeu pela ajuda, eu não sabia que tinha uma função pra contabilizar votos, to começando no python. Em relação a condição de saída do while eu tinha colocado pra quando fosse digitado “Encerrar” ele encerrava tudo e quebrava o while true, só não se isso está certo. Vou me basear pelo programa que vc me mandou muito obrigado novamente.

Sem querer ser muito invasivo, teria como me ajudar a como colocar pra perguntar o número de casas na rua antes de começar o resto do programa ?

Você já sabe fazer isso, é só usar input :slight_smile:

Achei que tivesse que colocar alguma função especial pra poder relacionar o número de casas com a quantidade de votos, então safe muito obg pela ajuda Hugo, salvou meu trabalho!!