Exercício 98

Home Fóruns Python Exercício 98

Visualizando 2 respostas da discussão
  • Autor
    Posts
    • #91686
      Antônio Merencio
      Participante

      O meu código por algum motivo (fiz dde uma forma diferente) ao passar valor negavito em alguns casos ele pula uma casa do “limite” que eu estabeleci, exemplo: de 10 a -12, de 7 em 7, ele vai mostar o -18, mesmo no while está especificiado inicio > fim, como poderá ser visto no código

      eu código é:

      def contador(inicio, fim, passo):
          print(f'Contagem de {inicio} até {fim} de {passo} em {passo}')
          cont = 10
          acumulador1 = 0
      
          if inicio < fim and passo != 0:
      
              if passo > 0:
      
                  print(inicio, end=' ')
      
                  while inicio < fim:
                      inicio += passo
                      print(inicio, end=' ')
                  print('Fim!')
                  print('-=' * 20)
      
              if passo < 0:
      
                  print(inicio, end=' ')
      
                  while inicio < fim:
                      inicio -= passo
                      print(inicio, end=' ')
                  print('Fim!')
                  print('-=' * 20)
      
          elif inicio > fim and passo != 0:
      
              print(inicio, end=' ')
      
              while inicio > fim:
      
                  if inicio < fim:
                      break
      
                  if passo > 0:
      
                      inicio -= passo
                      print(inicio, end=' ')
      
                      if inicio < fim:
                          print("deu erro")
      
                  if passo < 0:
      
                      inicio += passo
                      print(inicio, end=' ')
      
                  if inicio < fim:
                      break
      
              print('Fim!')
              print('-=' * 20)
      
          elif passo == 0:
      
              if inicio < fim:
                  print(inicio, end=' ')
      
                  while inicio < fim:
                      inicio += 1
                      print(inicio, end=' ')
                  print('Fim!')
                  print('-=' * 20)
      
              else:
                  print(inicio, end=' ')
      
                  while inicio > fim:
                      inicio -= 1
                      print(inicio, end=' ')
      
                  print('Fim!')
                  print('-=' * 20)
      
      contador(1, 10, 1)
      contador(10, 0, 2)
      
      print("Agora é sua vez de Usar o contador")
      a = int(input("Início:"))
      b = int(input("fim:"))
      c = int(input("passo:"))
      contador(a, b, c)
      
    • #91716
      IcaroFilho
      Moderador

      Bom dia. isto ocorre pois a logica dentro da condição esta errada. vc manda mostrar após a operação.

          elif inicio > fim and passo != 0:
      
              #print(inicio, end=' ') pode retirar esta linha
      
              while inicio > fim:
      
                  if inicio < fim:
                      break
      
                  if passo > 0:
      
                      print(inicio, end=' ')
                      inicio -= passo
      
                      if inicio < fim:
                          print("deu erro")
      
                  if passo < 0:
      
                      print(inicio, end=' ')
                      inicio += passo
      
                  if inicio < fim:
                      break
      
              print('Fim!')
              print('-=' * 20)

      com as entradas 10 | -12 | 7 , terá a saída:

      Contagem de 10 até -12 de 7 em 7
      10 3 -4 -11 deu erro
      Fim!

      Em termos aritméticos, a sua saída vai estar correta.. basta corrigir apenas algumas questões logicas e o código estará correto.

    • #91748
      Antônio Merencio
      Participante

      Não consegui entender muito bem meu erro, ele foi que o if passo deveria estar dentro do while?

      • #91836
        IcaroFilho
        Moderador

        Eu peguei o trecho referente a condição que esta te dando a duvida e refatorei com comentários:

            elif inicio > fim and passo != 0: 
                # print(inicio, end=' ') => não precisa porque o print do laço já faz isso
                while inicio >= fim: # enquanto o valor inicial for maio ou IGUAL ao fim
                    if inicio < fim: break # alterado para mesma linha por ser uma condição simples
                    if passo > 0: 
                        print(inicio, end=' ') # alterado posição do print com o acumulador
                        inicio -= passo 
                        if inicio < fim: 
                            print("Fim!") #alterado deu erro para fim
                    if passo < 0: 
                        print(inicio, end=' ')  
                        inicio += passo
                # print('Fim!') não precisa, uma vez que se o inicio for maior que o fim, será impresso o fim
                print('-=' * 20)

        o resultado é:

        -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
        Agora é sua vez de Usar o contador
        Início:30
        fim:-20
        passo:2
        Contagem de 30 até -20 de 2 em 2
        30 28 26 24 22 20 18 16 14 12 10 8 6 4 2 0 -2 -4 -6 -8 -10 -12 -14 -16 -18 -20 Fim!
        -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Visualizando 2 respostas da discussão
  • Você deve fazer login para responder a este tópico.