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

wrong number of arguments no pedeNumero

Quando executo meu código:

def daBoasVindas
  puts "Bem vindo ao jogo da advinhação! \n Qual é o seu nome?"
    nome = gets
  puts "Olá " + nome +", vamos começar?"
  puts "\n"
end

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

def pedeNumero(tentativa, numeroDeTentativas)
   puts "Tentativa " + tentativa.to_s + " de " + limite_de_tentativas.to_s
    puts "Entre com o número"
    chute = gets
    puts "Será que acertou? Você chutou " + chute
    chute.to_i
end

def avaliaResposta(numero_secreto, chute)
  acertou = chute == numero_secreto

  if acertou
    puts "Você acertou!\n" + chute + "é a resposta correta!!. :D \n"
    true
  end

  menor =chute < numero_secreto
  if menor
    puts "O numero que você escolheu, "+chute+", é menor que a resposta. :( \n"
  else
    puts "O numero que você escolheu, "+chute+", é maior que a resposta. :(\n"
  end
  false
end

def despedida
  puts "Obrigado por testar meu primeiro jogo. <3 "
end

daBoasVindas

numero_secreto = sorteiaNumero

numeroDeTentativas = 3

pedeNumero


for contaTentativa in 1..numeroDeTentativas  
      chute = pedeNumero
      if avaliaResposta
        break
      end
end

  despedida

aparece a seguinte saída no terminal:

Bem vindo ao jogo da advinhação! Qual é o seu nome? kaique Olá kaique , vamos começar?

Escolhendo um número secreto entre 0 e 200... Escolhido... que tal adivinhar hoje nosso número secreto? wrong number of arguments (given 0, expected 2) (repl):16:in pedeNumero' (repl):51:in'

tentei resolver sozinho mas empaquei nessa parte

4 respostas

Oi, Kaique! O que acontece é que você está chamando a função pedeNumero, que requere dois parâmetros (tentativa e numeroDeTentativas) passando nenhum parâmetro!

Tente mudar sua linha dentro do for

chute = pedeNumero

para

chute = pedeNumero contaTentativa, numeroDeTentativas

Repare que você também não passou os argumentos na chamada da função avaliaResposta, que requere dois argumentos (numero_secreto e chute). Então tem que mudar também a linha

if avaliaResposta

para

if avaliaResposta numero_secreto, chute

Agora só mais uma coisa! Antes do seu loop for você está tentando chamar a função pedeNumero, mas essa chamada não vai funcionar, tanto porque você não dá os argumentos, quanto porque você ainda nem sabe em qual tentativa está. Pode só remover essa linha que vai dar tudo certo!

Tenta isso e dá um feedback aqui pra gente saber se deu tudo certo. Abraços!

Continua dando erro:


def daBoasVindas
  puts "Bem vindo ao jogo da advinhação! \n Qual é o seu nome?"
    nome = gets
  puts "Olá " + nome +", vamos começar?"
  puts "\n"
end

def sorteiaNumero 
  puts "Escolhendo um numero entre 0 e 200..."
  sorteado = 175
  puts "Escolhido ... vamos adivinhar o numero secreto?"
  sorteado
end

def pedeNumero tentativa, numeroDeTentativas
  puts "Sua tentativa " + tentativa.to_s + " de " + numeroDeTentativas.to_s + ":"
  puts "Escolha um numero entre 0 e 200:"
    chute = gets
    return chute   
end

def avaliaResposta(numero_secreto, chute)
  acertou = numero_secreto == chute
    if acertou
        puts "Acertou!"
        return true

    else
        maior = numero_secreto > chute
        if maior
            puts "O número secreto é maior!"
            false
        else
            puts "O número secreto é menor!"
            false
        end
    end
    false
end


def despedida
  puts "Obrigado por testar meu primeiro jogo. <3 "
end

daBoasVindas

numero_secreto = sorteiaNumero


avaliaResposta(numero_secreto, chute)

numeroDeTentativas = 3

for contaTentativa in 1..numeroDeTentativas  
      chute = pedeNumero contaTentativa numeroDeTentativas
      if avaliaResposta(numero_secreto, chute)
        break
      end
end

  despedida

saida:

# ruby jogo.rb 
Bem vindo ao jogo da advinhação! 
 Qual é o seu nome?
kaique
Olá kaique
, vamos começar?

Escolhendo um numero entre 0 e 200...
Escolhido ... vamos adivinhar o numero secreto?
jogo.rb:52:in `<main>': undefined local variable or method `chute' for main:Object (NameError)
Did you mean?  chute

como vou fazer pra continuar o processo sem usar a pedeNumero? nao e ela quem determina a variavel chute?

solução!

Kaique, está dando erro por causa da linha avaliaResposta(numero_secreto, chute) acima do laço for. Repare que nesse momento você ainda nem tem um chute do usuário, então essa variável não existe. Tirando essa linha deve funcionar. E você usa a função pedeNumero, mas dentro do for, para chamar todas as vezes que o número de tentativas permite.

Valeuu, tava quebrado cabeça nisso a um tempão. Valeu pela ajuda