Ir para conteúdo
Fórum Script Brasil
  • 0

Por que não está somando? Novato em python:


Yago Souza

Pergunta

totm = 0

toth = 0

ti = 0

x = totm+ti

y = toth+ti

while True:

    z = str(input('Digite seu sexo [M/F]: ')).strip().lower()[0]
    i = int(input('Digite sua idade: '))
    resp = str(input('Gostaria de Continuar? [S/N]: ')).strip().lower()[0]
    if resp == 'n':
        print('----------------------------\nTotal de pessoas com +18 anos: '
              '{}\n -----------------------\nTotal de homens com +18 anos: {}'
              '\n -------------------------\nTotal de Mulheres com +18: {}'.format(ti, y, x))
        if i >= 18:
            ti += 1
            if z == 'm' and i >= 18:
                toth += 1
                if z == 'f' and i >= 18:
                    totm += 1
                    if resp == 's':
                        z = ' '
                        break

Podem me ajudar? Por que não está somando? Quando aperto 'n', aparece a lista, mas tudo zerado, sem a soma das pessoas com a idade. (não mostra quantos homens +18 e quantas mulheres +18 nem quantas pessoas +18 no total)

totm = mulheres

toth = homens

ti = total +18

x soma de mulheres com +18

y soma de homens com +18

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Não está mostrando porque o print está sendo feito antes dos totais serem calculados. Normalmente os cálculos / contadores são feitos dentro do while mas os totais são impressos fora dele:

soma = 0
while True:
  # inputs do usuario
  numero = int(input("digite um numero: "))
  
  # calculos, contadores, condicionais, etc
  soma += numero
  
  # condição de parada
  resposta = str(input("deseja continuar(s/n)?"))
  if resposta == 'n':
    break

# resultsdo final, totais
print(f"total é: {soma}")

No seu caso, também tem alguns erros na lógica. Se você quer apenas os totais de pessoas maiores do que 18 anos, não precisa fazer esse teste em todos os ifs. Você pode fazer apenas as condições de masculino ou feminino dentro da condicional de 18 anos. Algo assim:

# verifica se é maior que 18
if i >= 18:
  
    # adiciona no total de pessoals
    ti += 1 
    
    # verifica masculino
    if z == 'm':
      
        # adiciona homem
        toth += 1        
        
    # verifica feminino
    if z == 'f':
      
        # adiciona mulher
        totm += 1
            

A condição de parada também está em um lugar errado. Ela deve ficar no final do cálculo. De outra forma, o script não irá calcular o último valor informado pelo usuário. O exemplo completo ficaria mais ou menos assim:

totm = 0
toth = 0
ti = 0

while True:
    z = str(input('Digite seu sexo [M/F]: ')).strip().lower()[0]
    i = int(input('Digite sua idade: '))
    
    if i >= 18:
        ti += 1                
        if z == 'm':
            toth += 1        
        if z == 'f':
            totm += 1
     
    resp = str(input('Gostaria de Continuar? [S/N]: ')).strip().lower()[0]
    if resp == 'n':
        break                                      
                        
print('----------------------------\nTotal de pessoas com +18 anos: '
              '{}\n -----------------------\nTotal de homens com +18 anos: {}'
              '\n -------------------------\nTotal de Mulheres com +18: {}'.format(ti, toth, totm))

Essa seria uma das muitas formas de resolver isso. Espero ter ajudado.

Editado por Ivan Frezza Junior
Erro de digitação
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652,1k
×
×
  • Criar Novo...