Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

A resposta do terminal esta saindo diferente do debug

# Utilizando listas faça um programa que faça 5 perguntas para uma pessoa sobre um crime. As perguntas são:
# "Telefonou para a vítima?"
# "Esteve no local do crime?"
# "Mora perto da vítima?"
# "Devia para a vítima?"
# "Já trabalhou com a vítima?" O programa deve no final emitir uma classificação sobre a participação da pessoa no crime. 
# Se a pessoa responder positivamente a 2 questões ela deve ser classificada como "Suspeita", entre 3 e 4 como "Cúmplice" e 5 como "Assassino". Caso contrário, ele será classificado como "Inocente".



classificacao = ("Suspeita",
                "Cúmplice",
                "Assassino",
                "Inocente")

perguntas = ['Telefonou para a vítima?',
            'Esteve no local do crime?',
            'Mora perto da vítima??',
            'Devia para a vítima?',
            'Já trabalhou com a vítima?']

count = 0

respostas = False
for i in range(len(perguntas)):
    respostas = bool(input('{}\n'.format(perguntas[i])))
    if(respostas==True):
        count+=1

if(count == 2):
    print(classificacao[0])
elif(count == 3 or count == 4):
    print(classificacao[1])
elif (count == 5):
    print(classificacao[2])
else:
    print(classificacao[3])

estou começando agora no python e estou fazendo o exercicio abaixo

o problema e o seguinte , quando eu executo ele pelo debug do vscode ele informa a resposta correta , mas quando eu executo pelo terminal ele me mostra como todas as respostas fosse True (mostrando como assassino ), mesmo eu informando false em algumas delas

podem me ajudar ?

3 respostas
solução!

Olá, Messias!

Aparentemente, o que está causando este problema é a aplicação da expressão "bool()" para sua variável "respostas".

Ao fazer isso, você está dando a seguinte instrução para o seu programa: se houver algum input - qualquer um -, sua variável "respostas" será True. E se não houver input algum, será "False".

Por isso, quando você escreve True ou False no prompt vai ser indiferente, ele transformará "respostas" em True. E, consequentemente, vai incrementar sua variável "count".

Para entender esse ponto, se não ficou claro (e essa é uma forma interessante de debugar seus programas), coloque um print para repostas e outro para count, logo após os comandos.

Bem, uma forma simples de resolver isso, mexendo o mínimo possível na sua lógica, é retirar o "bool()" e determinar qual é a string que você vai considerar como resposta verdadeira (neste caso, coloquei "Sim", mas pode ser qualquer coisa! Pode ser "True", "Sim", "S"...; essa instrução deve ser passada ao usuário).

Assim:

count = 0

respostas = False
for i in range(len(perguntas)):
    respostas = input('{}\n'.format(perguntas[i]))
    if(respostas =='Sim'):
        count+=1

O restante fica igual, e você verá que assim funciona.

Qualquer problema, dê um toque!

Abraços!

Olá Messias, como você está respondendo? Escrevendo True e False?

Se for isso, a variável respostas sempre terá valor igual a True:

    respostas = bool(input('{}\n'.format(perguntas[i])))

Isso acontece porque a função input() devolve uma String e uma String não vazia sempre é True quando convertida para um boolean. Se você apenas apertar enter (sem digitar nada) após a pergunta, verá que a variável respostas recebe False.

Sugiro você esperar que o usuário digite 0 (p/ False) e 1 (p/ True) e mudar o código para:

    respostas = bool(int(input('{}\n'.format(perguntas[i]))))

Se a dúvida ainda permanecer, não deixe de perguntar novamente!

Espero ter ajudado e bons estudos!

Entendi , muito obrigado =D