Problema ao exibir o resultado desejado

Estou com problema com o desenvolvimento do seguinte código:

dia = ['Segunda-Feira', 'Terça-Feira', 'Quarta-Feira', 'Quinta-Feira', 'Sexta-Feira']
num = {dia[0] : 0, dia[1] : 0, dia[2] : 0, dia[3] : 0, dia[4] : 0}
print("SISTEMA DE VOTAÇÃO\n")
alunos = int(input("Informe quantos alunos iram votar: "))
print("Digite: \n 1 - Segunda-Feira \n 2 - Terça-Feira \n 3 - Quarta-Feira \n 4 - Quinta-Feira \n 5 - Sexta-Feira \n")
print("Digite apenas valores entre 1 e 5!\n")
for x in range (alunos) :
    voto = input("\nDigite o número correspondente a sua opção: \n")
    if voto == str(1) : num[dia[0]] += 1
    elif voto == str(2) : num[dia[1]] += 1
    elif voto == str(3) : num[dia[2]] += 1
    elif voto == str(4) : num[dia[3]] += 1
    elif voto == str(5) : num[dia[4]] += 1
    elif voto == str(6) : num[dia[5]] += 1
print ("\n RESULTADO \n")
print (num.items())
print (max(dia))

O problema do qual não estou conseguindo corrigir é o seguinte: independente da quantidade de votos que qualquer dia receba, ele sempre retorna como Terça-Feira.
Preciso exibir o dia que recebeu mais votos, por isso coloquei o “max(dia))” e também exibir todos os dias e quantos votos receberam.

Podem ajudar?

Não entendo muito de python, mas pesquisando sobre a função max() deu a entender que ele retorna “Terça-Feira” porque é o maior item ordenado alfabeticamente. Seguindo o exemplo desse site, acho que você consegue exibir o dia com mais votos usando o max dessa maneira:

print (max(num, key = lambda k: num[k]))

Cara, funcionou perfeitamente. Obrigado !

Alguns detalhes a se atentar:

  • a lista de dias tem 5 elementos, mas você está verificando também a opção 6, o que não faz sentido. Deveria ir somente até a 5
  • em vez de comparar o voto com str(1), str(2), etc, é melhor tentar converter o voto para inteiro e depois verificar se está entre 1 e 5
  • em vez de usar valores fixos (1, 2, etc), use loops. Assim, se a lista de dias mudar (por exemplo, vai que precisa colocar o sábado, ou tirar um dos dias, etc), o resto do código permanece igual
  • e para encontrar o maior valor do dicionário, poderia ser max(num, key=num.get)
  • mas eu mudaria alguns nomes para deixar mais claro o que cada coisa é - pode parecer besteira, mas nomes melhores ajudam muito na hora de programar

Seria algo assim:

# coloquei o nome no plural, afinal é uma lista de dias
dias = ['Segunda-Feira', 'Terça-Feira', 'Quarta-Feira', 'Quinta-Feira', 'Sexta-Feira']
# começa com todos os dias zerados (e mudei o nome pra algo melhor)
contagem_votos = { dia: 0 for dia in dias }

print("SISTEMA DE VOTAÇÃO\n")
alunos = int(input("Informe quantos alunos iram votar: "))
for x in range(alunos):
    # junte todos os dias em uma string, usando join
    print("Digite:\n" + '\n'.join(f'{i} - {dia}' for i, dia in enumerate(dias, start=1)))
    print("Digite apenas valores entre 1 e {len(dias)}!\n") # use o tamanho da lista em vez de um valor fixo
    try:
        voto = int(input("\nDigite o número correspondente a sua opção: \n"))
        if 1 <= voto <= len(dias): # voto válido
            contagem_votos[dias[voto - 1]] += 1
        else:
            print('Opção inválida')
    except ValueError:
        print('Você não digitou um número')
print("\n RESULTADO \n")
print(contagem_votos.items())
print('Dia com mais votos:', max(contagem_votos, key=contagem_votos.get))

Se bem que nesses casos é melhor usar o que já tem pronto. Para contagens deste tipo, existe a classe Counter, que facilita inclusive para encontrar o maior valor (pois já tem isso pronto, com o método most_common):

# coloquei o nome no plural, afinal é uma lista de dias
dias = ['Segunda-Feira', 'Terça-Feira', 'Quarta-Feira', 'Quinta-Feira', 'Sexta-Feira']

# use um Counter em vez de dicionário
from collections import Counter
contagem_votos = Counter()

print("SISTEMA DE VOTAÇÃO\n")
alunos = int(input("Informe quantos alunos iram votar: "))

for x in range(alunos):
    print("Digite:\n" + '\n'.join(f'{i} - {dia}' for i, dia in enumerate(dias, start=1)))
    print("Digite apenas valores entre 1 e {len(dias)}!\n")
    try:
        voto = int(input("\nDigite o número correspondente a sua opção: \n"))
        if 1 <= voto <= len(dias): # voto válido
            contagem_votos.update([dias[voto - 1]])
        else:
            print('Opção inválida')
    except ValueError:
        print('Você não digitou um número')
print("\n RESULTADO \n")
print(contagem_votos)
print('Dia com mais votos:', contagem_votos.most_common(1)[0][0])

Vale lembrar que nenhuma das opções acima considera empates. Se tiver mais de um dia empatado (por exemplo, tanto segunda quanto terça tem mais votos), está pegando somente um deles.

Se for para mostrar todos os dias com mais votos (ou seja, se tiver empate no primeiro lugar), teria que mudar um pouco:

# usar o segundo código acima (o que usa Counter)
# mas em vez de imprimir só um dia, verifica se teve empate no dia mais votado

# em caso de empate, se quiser mostrar todos os dias que estão empatados em primeiro
# lista ordenada por votos (mais votos primeiro)
most_common = contagem_votos.most_common()
# pega a quantidade de votos do primeiro
votos_primeiro = most_common[0][1]
# mostra todos os dias que têm essa quantidade de votos
print(f'Dias mais votados (todos com {votos_primeiro} votos):')
for dia, votos in most_common:
    if votos != votos_primeiro: # se não tem a mesma quantidade de votos, posso interromper
        break
    print('-', dia)