Простая игра High-Low в Ruby - PullRequest
       4

Простая игра High-Low в Ruby

0 голосов
/ 31 января 2011

Я пытаюсь написать простую хай-лоу программу, которая будет выводить так:

$ ./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.
$

Это код, который у меня есть, но я где-то ошибаюсь. Кажется, иногда работает:


count=0
play = true
while play = true </p>

<pre><code>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

ставит "Правильно! Вы угадали ответ" + count.to_s + "попытки!" print «Хотели бы вы сыграть снова?»

ответ = gets.chomp! если ответ == 'n' play = false перерыв конец

if 
    answer == 'y'
    play = true
end 

конец ставит "ОК. До свидания"

Есть предложения? Куда я иду не так?

1 Ответ

2 голосов
/ 31 января 2011

Я думаю, что ваша проблема (та, которую я вижу в любом случае) связана с кодом проверки номера.

Если guess больше, чем num, то первый оператор if будет выполнен, но затем второй перенаправит на другое, прерывая цикл.

Вам нужно использовать elsif. Попробуйте изменить это на это:

    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
...