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
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!!