Jump to content

Estou tendo dificuldade para validar a entrada de binário


lucasrvh
Ir para a Solução Solucionado por lizandro,

Postagens Recomendadas

Citação

 

while True:

  print("""
                    MENU
           QUAL O TIPO DE ENTRADA?
                1 = DECIMAL
                2 = BINARIO
                3 = OCTAL
                4 = HEXADECIMAL
                5 = SAIR DO PROGRAMA
  """)
  opcao = int(input("Digite sua escolha "))

  if opcao == 1:
    print("""
                    MENU
        PARA QUAL BASE QUER CONVERTER?
        1 = CONVERTER PARA BINARIO
        2 = CONVERTER PARA OCTAL
        3 = CONVERTER PARA HEXADECIMAL
    """)
    escolha = int(input("Digite sua escolha "))

    if escolha == 1:
      try:
           entrada = int(input("Digite o numero decimal "))
      except ValueError:
          print("ENTRADA INVALIDA.")
      else:
        quociente = 1
        lista = []

        while quociente >= 1:
            resto = entrada % 2
            lista.insert(0, resto)
            quociente = entrada // 2
            entrada = quociente

        binario = ''.join([str(item) for item in lista])
        print("O número convertido eh:", binario)


    elif escolha == 2:
      try:
           entrada = int(input("Digite o numero decimal "))
      except ValueError:
          print("ENTRADA INVALIDA")
      else:
        lol = str(oct(entrada))
        print("o número convertido eh: ", lol)

    elif escolha == 3:
      try:
           entrada = int(input("Digite o numero decimal "))
      except ValueError:
          print("ENTRADA INVALIDA")
      else:
        xq = str(hex(entrada))
        print("O número convertido eh: ", xq)

    else:
      print("OPCAO INVALIDA")

  elif opcao == 2:
    print("""
                    MENU
        PARA QUAL BASE QUER CONVERTER?
        1 = CONVERTER PARA DECIMAL
        2 = CONVERTER PARA OCTAL
        3 = CONVERTER PARA HEXADECIMAL
    """)
    escolha = int(input("Digite sua escolha "))

    if escolha == 1:
      entrada = input("Digite o numero binario ")
      try:
          if all(bit in '01' for bit in entrada):
            n = len(str(entrada))
            decimal = 0
            i = 0

            while n >= 0:
              resto = entrada % 10
              decimal = decimal + (resto * (2**i))
              n = n - 1
              i = i + 1
              entrada = entrada // 10

            print("O número convertido eh: ", decimal)
          else:
            raise ValueError
      except ValueError:
          print("ENTRADA INVALIDA")


    elif escolha == 2:
      entrada = input("Digite o numero binario ")
      try:
          if all(bit in '01' for bit in entrada):
            n = len(str(entrada))
            decimal = 0
            i = 0

            while n >= 0:
              resto = entrada % 10
              decimal = decimal + (resto * (2**i))
              n = n - 1
              i = i + 1
              entrada = entrada // 10

            lol = str(oct(decimal))
            print("o número convertido eh: ", lol)
          else:
            raise ValueError
      except ValueError:
          print("ENTRADA INVALIDA")

    elif escolha == 3:
      entrada = input("Digite o numero binario ")
      try:
          if all(bit in '01' for bit in entrada):
            n = len(str(entrada))
            decimal = 0
            i = 0

            while n >= 0:
              resto = entrada % 10
              decimal = decimal + (resto * (2**i))
              n = n - 1
              i = i + 1
              entrada = entrada // 10

            xq = str(hex(decimal))
            print("O número convertido eh: ", xq)
          else:
            raise ValueError
      except ValueError:
          print("ENTRADA INVALIDA")

    else:
      print("OPCAO INVALIDA")

  elif opcao == 3:
    print("""
                    MENU
        PARA QUAL BASE QUER CONVERTER?
        1 = CONVERTER PARA DECIMAL
        2 = CONVERTER PARA BINARIO
        3 = CONVERTER PARA HEXADECIMAL
    """)
    escolha = int(input("Digite sua escolha "))

    if escolha == 1:
      entrada = input("Digite o número octal: ")
      try:
         if all(digit in '01234567' for digit in entrada):
           numero_decimal = int(entrada, 8)
           print("O número convertido é", numero_decimal)
         else:
           raise ValueError
      except ValueError:
          print("ENTRADA INVÁLIDA")

    elif escolha == 2:
      entrada = input("Digite o número octal: ")
      try:
         if all(digit in '01234567' for digit in entrada):
           numero_decimal = int(entrada, 8)

           quociente = 1
           lista = []

           while quociente >= 1:
             resto = numero_decimal%2
             lista.insert(0,resto)
             quociente = numero_decimal // 2
             numero_decimal = quociente

           binario = ''.join([str(item) for item in lista])
           print("O número convertido eh: ",binario)
         else:
           raise ValueError
      except ValueError:
          print("ENTRADA INVÁLIDA")

    elif escolha == 3:
      entrada = input("Digite o número octal: ")
      try:
         if all(digit in '01234567' for digit in entrada):
           numero_decimal = int(entrada, 8)

           xq = str(hex(numero_decimal))
           print("O número convertido eh: ", xq)

         else:
           raise ValueError
      except ValueError:
          print("ENTRADA INVÁLIDA")

    else:
      print("OPCAO INVALIDA")

  elif opcao == 4:
    print("""
                    MENU
        PARA QUAL BASE QUER CONVERTER?
        1 = CONVERTER PARA DECIMAL
        2 = CONVERTER PARA BINARIO
        3 = CONVERTER PARA OCTAL
    """)
    escolha = int(input("Digite sua escolha "))

    if escolha == 1:
        entrada = input("Digite o número hexadecimal: ")
        try:
            if all(char in '0123456789ABCDEFabcdef' for char in entrada):
             numero_hexadecimal = entrada
             numero_decimal = int(numero_hexadecimal, 16)
             print(numero_decimal) 

            else:
                raise ValueError
        except ValueError:
            print("ENTRADA INVÁLIDA")

    elif escolha == 2:
      entrada = input("Digite o número hexadecimal: ")
      try:
          if all(char in '0123456789ABCDEFabcdef' for char in entrada):
            numero_hexadecimal = entrada
            numero_decimal = int(numero_hexadecimal, 16)

            quociente = 1
            lista = []

            while quociente >= 1:
              resto = numero_decimal%2
              lista.insert(0,resto)
              quociente = numero_decimal // 2
              numero_decimal = quociente

            binario = ''.join([str(item) for item in lista])
            print("O número convertido eh: ",binario)

          else:
               raise ValueError
      except ValueError:
            print("ENTRADA INVÁLIDA")

    elif escolha == 3:
      entrada = input("Digite o número hexadecimal: ")
      try:
          if all(char in '0123456789ABCDEFabcdef' for char in entrada):
            numero_hexadecimal = entrada
            numero_decimal = int(numero_hexadecimal, 16)

            lol = str(oct(numero_decimal))
            print("o número convertido eh: ", lol)

          else:
             raise ValueError
      except ValueError:
            print("ENTRADA INVÁLIDA")

    else:
      print("OPCAO INVALIDA")

  elif opcao == 5:
    print("FECHANDO O PROGRAMA...")
    break

  else:
      print("OPCAO INVALIDA")

 

while True:

  print("""
                    MENU
           QUAL O TIPO DE ENTRADA?
                1 = DECIMAL
                2 = BINARIO
                3 = OCTAL
                4 = HEXADECIMAL
                5 = SAIR DO PROGRAMA
  """)
  opcao = int(input("Digite sua escolha "))

  if opcao == 1:
    print("""
                    MENU
        PARA QUAL BASE QUER CONVERTER?
        1 = CONVERTER PARA BINARIO
        2 = CONVERTER PARA OCTAL
        3 = CONVERTER PARA HEXADECIMAL
    """)
    escolha = int(input("Digite sua escolha "))

    if escolha == 1:
      try:
           entrada = int(input("Digite o numero decimal "))
      except ValueError:
          print("ENTRADA INVALIDA.")
      else:
        quociente = 1
        lista = []

        while quociente >= 1:
            resto = entrada % 2
            lista.insert(0, resto)
            quociente = entrada // 2
            entrada = quociente

        binario = ''.join([str(item) for item in lista])
        print("O número convertido eh:", binario)


    elif escolha == 2:
      try:
           entrada = int(input("Digite o numero decimal "))
      except ValueError:
          print("ENTRADA INVALIDA")
      else:
        lol = str(oct(entrada))
        print("o número convertido eh: ", lol)

    elif escolha == 3:
      try:
           entrada = int(input("Digite o numero decimal "))
      except ValueError:
          print("ENTRADA INVALIDA")
      else:
        xq = str(hex(entrada))
        print("O número convertido eh: ", xq)

    else:
      print("OPCAO INVALIDA")

  elif opcao == 2:
    print("""
                    MENU
        PARA QUAL BASE QUER CONVERTER?
        1 = CONVERTER PARA DECIMAL
        2 = CONVERTER PARA OCTAL
        3 = CONVERTER PARA HEXADECIMAL
    """)
    escolha = int(input("Digite sua escolha "))

    if escolha == 1:
      entrada = input("Digite o numero binario ")
      try:
          if all(bit in '01' for bit in entrada):
            n = len(str(entrada))
            decimal = 0
            i = 0

            while n >= 0:
              resto = entrada % 10
              decimal = decimal + (resto * (2**i))
              n = n - 1
              i = i + 1
              entrada = entrada // 10

            print("O número convertido eh: ", decimal)
          else:
            raise ValueError
      except ValueError:
          print("ENTRADA INVALIDA")


    elif escolha == 2:
      entrada = input("Digite o numero binario ")
      try:
          if all(bit in '01' for bit in entrada):
            n = len(str(entrada))
            decimal = 0
            i = 0

            while n >= 0:
              resto = entrada % 10
              decimal = decimal + (resto * (2**i))
              n = n - 1
              i = i + 1
              entrada = entrada // 10

            lol = str(oct(decimal))
            print("o número convertido eh: ", lol)
          else:
            raise ValueError
      except ValueError:
          print("ENTRADA INVALIDA")

    elif escolha == 3:
      entrada = input("Digite o numero binario ")
      try:
          if all(bit in '01' for bit in entrada):
            n = len(str(entrada))
            decimal = 0
            i = 0

            while n >= 0:
              resto = entrada % 10
              decimal = decimal + (resto * (2**i))
              n = n - 1
              i = i + 1
              entrada = entrada // 10

            xq = str(hex(decimal))
            print("O número convertido eh: ", xq)
          else:
            raise ValueError
      except ValueError:
          print("ENTRADA INVALIDA")

    else:
      print("OPCAO INVALIDA")

  elif opcao == 3:
    print("""
                    MENU
        PARA QUAL BASE QUER CONVERTER?
        1 = CONVERTER PARA DECIMAL
        2 = CONVERTER PARA BINARIO
        3 = CONVERTER PARA HEXADECIMAL
    """)
    escolha = int(input("Digite sua escolha "))

    if escolha == 1:
      entrada = input("Digite o número octal: ")
      try:
         if all(digit in '01234567' for digit in entrada):
           numero_decimal = int(entrada, 8)
           print("O número convertido é", numero_decimal)
         else:
           raise ValueError
      except ValueError:
          print("ENTRADA INVÁLIDA")

    elif escolha == 2:
      entrada = input("Digite o número octal: ")
      try:
         if all(digit in '01234567' for digit in entrada):
           numero_decimal = int(entrada, 8)

           quociente = 1
           lista = []

           while quociente >= 1:
             resto = numero_decimal%2
             lista.insert(0,resto)
             quociente = numero_decimal // 2
             numero_decimal = quociente

           binario = ''.join([str(item) for item in lista])
           print("O número convertido eh: ",binario)
         else:
           raise ValueError
      except ValueError:
          print("ENTRADA INVÁLIDA")

    elif escolha == 3:
      entrada = input("Digite o número octal: ")
      try:
         if all(digit in '01234567' for digit in entrada):
           numero_decimal = int(entrada, 8)

           xq = str(hex(numero_decimal))
           print("O número convertido eh: ", xq)

         else:
           raise ValueError
      except ValueError:
          print("ENTRADA INVÁLIDA")

    else:
      print("OPCAO INVALIDA")

  elif opcao == 4:
    print("""
                    MENU
        PARA QUAL BASE QUER CONVERTER?
        1 = CONVERTER PARA DECIMAL
        2 = CONVERTER PARA BINARIO
        3 = CONVERTER PARA OCTAL
    """)
    escolha = int(input("Digite sua escolha "))

    if escolha == 1:
        entrada = input("Digite o número hexadecimal: ")
        try:
            if all(char in '0123456789ABCDEFabcdef' for char in entrada):
             numero_hexadecimal = entrada
             numero_decimal = int(numero_hexadecimal, 16)
             print(numero_decimal) 

            else:
                raise ValueError
        except ValueError:
            print("ENTRADA INVÁLIDA")

    elif escolha == 2:
      entrada = input("Digite o número hexadecimal: ")
      try:
          if all(char in '0123456789ABCDEFabcdef' for char in entrada):
            numero_hexadecimal = entrada
            numero_decimal = int(numero_hexadecimal, 16)

            quociente = 1
            lista = []

            while quociente >= 1:
              resto = numero_decimal%2
              lista.insert(0,resto)
              quociente = numero_decimal // 2
              numero_decimal = quociente

            binario = ''.join([str(item) for item in lista])
            print("O número convertido eh: ",binario)

          else:
               raise ValueError
      except ValueError:
            print("ENTRADA INVÁLIDA")

    elif escolha == 3:
      entrada = input("Digite o número hexadecimal: ")
      try:
          if all(char in '0123456789ABCDEFabcdef' for char in entrada):
            numero_hexadecimal = entrada
            numero_decimal = int(numero_hexadecimal, 16)

            lol = str(oct(numero_decimal))
            print("o número convertido eh: ", lol)

          else:
             raise ValueError
      except ValueError:
            print("ENTRADA INVÁLIDA")

    else:
      print("OPCAO INVALIDA")

  elif opcao == 5:
    print("FECHANDO O PROGRAMA...")
    break

  else:
      print("OPCAO INVALIDA")

 

Imagem do WhatsApp de 2023-10-26 à(s) 17.08.23_8604429d.jpg

Editado por lucasrvh
Código aprimorado
  • Curtir 1
Link to comment
Compartilhe em outros sites

  • lucasrvh mudou o título para Estou tendo dificuldade para validar a entrada de binário
  • 3 months later...
  • Solução

Bom dia

Pelo que vi, quando você fornece o valor decimal o loop funciona corretamente porque você está tratando um número inteiro, no entanto, quando você fornece a string binária - 00110010, o código tenta calcular o valor decimal usando a lógica de divisão por 10, que não é apropriada para uma representação binária.

Para resolver o problema você poderia substituir o código abaixo 

n = len(str(entrada))
decimal = 0
i = 0

while n >= 0:
	resto = entrada % 10
	decimal = decimal + (resto * (2**i))
	n = n - 1
	i = i + 1
	entrada = entrada // 10

           
pelo código

decimal = int(entrada, 2)

            
Isso resolveria o problema, mas, se quiseres fazer a própria lógica, você pode substituir o primeiro código por esse abaixo:

n = len(entrada) - 1
decimal = 0
i = 0

while n >= 0:
    bit = int(entrada[n])  # Converte o bit atual para um número
    decimal = decimal + (bit * (2**i))
    n = n - 1
    i = i + 1 


Ajuste seu código nas 3 escolhas referente ao número binário e teste novamente.

Qualquer dúvida estamos a disposição.

  • Curtir 1
  • Ajudou! 1
Link to comment
Compartilhe em outros sites

  • 2 weeks later...
  • Administradores
Em 29/02/2024 at 05:16, BlackMamba17 disse:

Olá a todos, sou novo neste fórum e gostaria de saber onde posso conversar mais com as pessoas sobre Python?

Olá, @BlackMamba17 😊

Que tal criar um tópico sobre o assunto que deseja discutir nesta página? Nossa comunidade está repleta de especialistas em Python prontos para ajudá-lo com suas dúvidas e questões específicas. Aguardamos ansiosamente sua participação! 💜

Link to comment
Compartilhe em outros sites

Crie uma conta ou entre para comentar 😀

Você precisa ser um membro para deixar um comentário.

Crie a sua conta

Participe da nossa comunidade, crie sua conta.
É bem rápido!

Criar minha conta agora

Entrar

Você já tem uma conta?
Faça o login agora.

Entrar agora


×
×
  • Create New...