Reputation: 1031
I'm trying to write a simple high-low program that will output like this:
$ ./highlow.rb Please tell me the max value of the random number: 100 Ok. The random number is generated between 1 and 100. Make your guess: 50 That's too low. Guess again: 75 That's too high. Guess again: 63 That's too low. Guess again: 68 Correct! You guessed the answer in 4 tries! Would you like to play again? no OK. Goodbye. $
This is the code I have, but I'm going wrong somewhere. It appears to work sometimes:
count=0
play = true
while play = true
print "Please tell me the max value of the random number: "
max= gets.to_i
num= rand(max)
puts "Ok. The random number is generated between 1 and " + max.to_s +
"."
print "Make your guess: "
guess=gets.to_i
while guess != num && play != false
if guess > num
print "That's too high. Guess again: "
guess=gets.to_i
count+=1
end
if guess < num
print "That's too low. Guess again: "
guess=gets.to_i
count+=1
else
break
end
end
puts "Correct! You guessed the answer in " + count.to_s + " tries!"
print "Would you like to play again? "
answer=gets.chomp!
if answer == 'n'
play = false
break
end
if
answer == 'y'
play = true
end
end
puts "OK. Goodbye"
Any suggestions? Where am I going wrong?
Upvotes: 0
Views: 2050
Reputation: 103467
I think your problem (the one I can see anyway) is with number checking code.
If guess
is greater than num
, then the first if statement will execute, but then the second one will redirect to the else, breaking out of the loop.
You need to use an elsif
. Try changing it to this:
if guess > num
print "That's too high. Guess again: "
guess=gets.to_i
count+=1
elsif guess < num
print "That's too low. Guess again: "
guess=gets.to_i
count+=1
else
break
end
Upvotes: 2