Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

ERRO - Aula 5.1

Estou fazendo exatamente como está no vídeo (pelo menos não encontrei nada que esteja fazendo diferente) e meu código da erro. Eu coloco pontos_ate_agora = 1000 Digo que pontos_a_perder = (chute - numero_secreto) / 2 Atualizo os pontos com pontos_ate_agora -= pontos_a_perder E peço pra imprimir puts "Você ganhou #{pontos_ate_agora} pontos."

O que estou fazendo de errado? Segue trecho do meu código:

pontos_ate_agora = 1000
limite_de_tentativas = 5
chutes = []
total_de_chutes = 0

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) /2
    pontos_ate_agora -= pontos_a_perder

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

Agradeço desde já!

6 respostas

Hey Will, fiz um pequeno teste usando o seu código e retornou erro ao tentar achar o método pede_um_numero.

Em seguida, o verifica_se_acertou

Adicione os seguintes métodos no seu código:

def pede_um_numero(chutes, tentativa, limite_de_tentativas)
    puts "\n\n\n\n"
    puts "Tentativa " + tentativa.to_s + " de " + limite_de_tentativas.to_s
    puts "Chutes até agora: " + chutes.to_s
    puts "Entre com o número"
    chute = gets
    puts "Será que acertou? Você chutou " + chute
    chute.to_i
end

def verifica_se_acertou(numero_secreto, chute)
    if numero_secreto == chute
        return true
    end
end

Sempre que executar um código e der erro, investigue em que linha ocorreu. A stack de erros costuma dar umas boas dicas de onde estamos errando.

Se o não resolver, cola o erro aqui e continuamos a conversa. Abraço!

Então, quando eu executo o código sem essa parte da aula 5.1 funciona certinho, mas quando eu coloco as novas strings ele dá erro. O código ficou assim:

def da_boas_vindas
    puts "Bem vindo ao jogo da adivinhação."
    puts "Qual é o seu nome?"
    nome = gets.strip
    puts "\n\n\n\n\n\n"
    puts "Começaremos o jogo para você, #{nome}"
end

def sorteia_numero_secreto
    puts "Escolhendo um número entre 0 e 200..."
    sorteado = 175
    puts "Escolhido...que tal adivinhar hoje nosso número secreto?"
    return sorteado
end

def pede_um_numero(chutes, tentativa, limite_de_tentativas)
    puts "\n\n\n\n"
    puts "Tentativa #{tentativa} de #{limite_de_tentativas}"
    puts "Chutes até agora: #{chutes}"
    puts "Entre com um número"
    chute = gets.strip 
    puts "Será que acertou? Você chutou #{chute}"
    return chute
end

def verifica_se_acertou(numero_secreto, chute)
    acertou = numero_secreto == chute.to_i

    if acertou
        puts "Acertou!"
        return true
    else
        maior = numero_secreto > chute.to_i
        if maior
           puts "O número secreto é maior!"
           return false
        else   
           puts "O número secreto é menor!"
           return false
        end
    end
end

da_boas_vindas
numero_secreto = sorteia_numero_secreto

pontos_ate_agora = 1000
limite_de_tentativas = 5
chutes = []
total_de_chutes = 0

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) /2
    pontos_ate_agora -= pontos_a_perder

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

Aah o erro que aparece quando chuto por exemplo o número 100 é:

maior_ou_menor.rb:57: in 'block in ' : undefined method ' - ' for "100" :String (NoMethodError) from maior_ou_menor.rb:52: in ' each ' from maior_ou_menor.rb:52: in ' '

solução!

William,

achei.

Faltou um to_i no return do método pede_um_numero

def pede_um_numero(chutes, tentativa, limite_de_tentativas)
    puts "\n\n\n\n"
    puts "Tentativa #{tentativa} de #{limite_de_tentativas}"
    puts "Chutes até agora: #{chutes}"
    puts "Entre com um número"
    chute = gets.strip 
    puts "Será que acertou? Você chutou #{chute}"
    return chute.to_i  ##AQUI!
end

Grande João!! Muito obrigado. Está rodando agora. Até a próxima dúvida hehehe.

Aew! Só marcar como solução. Até a próxima e não tenha vergonha em perguntar.

Abraço!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software