3
respostas

Preciso configurar algo no Notepad para rodar o .abs ?

Pergunto isso pois o .abs não funciona quando coloco no mesmo lugar que o Guilherme coloca no vídeo. E nenhuma outra operação matemática para reverter o sinal negativo funciona.

for tentativa in 1..limite_de_tentativas
    chute = pede_um_numero(chutes, tentativa, limite_de_tentativas)
    chutes << chute
    total_de_chutes += 1 

    pontos_a_perder = (chute - numero_secreto).abs /2
    pontos_ate_agora -= pontos_a_perder
    if pontos_a_perder < 0
       pontos_a_perder *= -1   
    end

    if verifica_se_acertou(numero_secreto, chute)
       break
    end   
end    
puts "Você ganhou  #{pontos_ate_agora} pontos."

Coloquei até as duas maneiras juntas, mas não funciona. Nem individuais, nem sozinhas. O erro que aparece é:

maior_ou_menor.rb:57: unterminated regexp meets end of file
maior_ou_menor.rb:57: syntax error, unexpected end-of-input, expecting keyword_end
puts "Você ganhou #{pontos_ate_agora} pontos."
                                                                                                                        ^
3 respostas

William,

Aconteceram algumas coisas aqui, vamos por partes.

Primeiro, ao ler o "stack" dá pra perceber que houveram dois erros, os dois na linha 57 do arquivo maior_ou_menor.rb, em tradução livre " regexp que termina e encontra o final do arquivo" e "erro de sintaxe, fim inesperado do input, esperava a palavra-chave 'end' ..." aprender a ler stack é importante, mas não se importe com isso agora só guarde o que eu traduzi.

Vamos tratá-los de forma separada: O primeiro erro de regexp, olhando na documentação vemos que o regexp no rails espera algo como /.../ e considera isso um objeto, pois você pode chamar métodos logo após isso dessa forma: /.../.match('...') então o que eu imagino é que o /2 está sendo interpretado pelo ruby como um regex que começou e não terminou.

Isso nos leva ao segundo erro, o método abs não espera nenhum parâmetro ou seja o /2 tem que ser considerado pelo ruby uma operação aritmética de divisão por 2 e não um objeto do tipo Regexp.

Será que agora você consegue resolver o problema ? Como forçar o Ruby a entender como divisão por 2 ?

Olá Ian. Em primeiro lugar, muito obrigado por dar dicas para que mesmo possa resolver o problema. Mas é que tudo ainda está meio confuso pra mim. Confesso que tem coisas que não estou entendendo muito bem. Essa dúvida é uma delas. Porque com a fórmula não funcionou e tampouco com o .abs se está igual (acho eu) o que mostra no vídeo?

William,

Eu não posso te dar a certeza do problema pois não tenho o código todo para reproduzir seu erro.

O que você pode fazer para garantir que não existe nenhum outro erro além desse, é utilizar o método abs no resultado do chute, armazenar isso em uma variável, e na linha seguinte fazer a divisão por dois. Digamos dividir para conquistar, separe os seus problemas para solucioná-los e depois tente otimizar seu código sem quebrar nada.

Boa Sorte!