Ir ao conteúdo

Python Erro : invalid literal for int() with base 10: ' '


Ir à solução Resolvido por voadorcareca,

Posts recomendados

Postado

Crie um programa que leia números inteiros do usuário até que uma linha em branco seja inserida. Uma vez que todos os números inteiros foram lidos, seu programa deve exibir todos os números, seguidos por todos os zeros, seguidos por todos os números positivos.*

Dentro de cada grupo, os números devem ser exibidos na mesma ordem em que foram inseridos pelo usuário.

Por exemplo, se o usuário digitar os valores 3, -4, 1, 0, -1, 0 e -2,

Então seu programa deve gerar os valores -4, -1, -2, 0, 0, 3 e 1.

lista = []
while True:
  valor = int(input('Digite um valor inteiro (Linha em branco para parar): '))
  lista.sort()
  if valor == " ": 
    print(lista)
    break
  elif valor <= 0:
    print(lista)
  elif valor == 0:
    print(lista)
  elif valor >= 0:
    print(lista)     
  lista.append(valor)  

Eu estava fazendo essa questão , boa parte dela dar certo quando executo , porém , quando eu coloco a parte branca , o programa é para parar , mas ele dar um erro dizendo : invalid literal for int() with base 10: '  ' , esse erro dar na linha do : valor = int(input('Digite um valor inteiro(Linha em branco para parar):')) , eu vi que tem a ver por conta que o espaço em branco ' ' ,é considerado uma string , mas  como eu faço pra meio que considera-la um inteiro também ? Eu n  sei exatamente  o que eu preciso converter  

  • Solução
Postado

Pense bem sobre o que essa linha está fazendo:

valor = int(input('Digite um valor inteiro (Linha em branco para parar): '))

 

Agora pense nesse comparativo aqui:

if valor == " ": 

 

Você está convertendo tudo que chega através de `input` em `int` isso acaba gerando uma exceção `ValueError` ao tentar processar uma string como integer.

 

Outra coisa: " " é diferente de "". Se você fizer o teste lógico com " " (aspas contendo um espaço dentro) só vai ser True se o usuário pressionar espaço e apertar enter.

 

Experimente o exemplo abaixo:

print(" " == "")

 

Existem algumas formas diferentes de fazer isso funcionar. Uma delas pode ser aceitar o `input` na forma de string e tentar converter para `int` dentro de um bloco try/except:

 

lista = []
while True:
    valor = input('Digite um valor inteiro (Linha em branco para parar): ') # não converta valor para 'int' aqui.
    try:
        valor = int(valor)
        lista.append(valor)
        lista.sort()
    except ValueError:
      	# Caso o usuário passe uma string vazia "" vai gerar uma exceção ValueError que nós trataremos aqui.
        if valor == "":
            print(lista)
            exit(0)

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...