Игра на угадывание рубиновых чисел

Я попытался сделать игру по угадыванию чисел с использованием Ruby, но, похоже, она снова зацикливается после того, как пользователь получает правильный ответ, вот мой код и заранее спасибо!

require './input_functions'

def check (rno,input)
    x = 1
    
    while (x == 1)  
        y = 0
        if (rno > input)
            puts("Try a bigger number")
            input = gets.chomp.to_i
            y = y + 1
            x = 1
        else
            if (rno < input)
                puts("Try a smaller number")
                input = gets.chomp.to_i
                y = y + 1
                x = 1
            else
                if (rno == input)    
                puts("Bingo!")
                x = 0
                end
            end
        end
    end
    return 
end


def main
    rno = rand(100)
        
    input = read_integer("Enter an integer between 0 and 100: ")
    check(rno,input,y)
    
    times = check(rno,input,y)
    puts ("You have tried " + times.to_s + " times.")
    
end

main

Убедитесь, что вы создали минимальный воспроизводимый пример. Обратите внимание, что все три из этих слов важны: это должен быть только пример, вы не должны публиковать весь реальный код, а должны создать упрощенный пример, демонстрирующий вашу проблему. Кроме того, он должен быть минимальный, т.е. он не должен содержать ничего, что не является абсолютно необходимым для демонстрации проблемы. (Большинство проблем для начинающих можно продемонстрировать менее чем в 5 коротких простых строках кода.) И это должно быть воспроизводимый, что означает, что если я скопирую и вставлю и запущу код, я увижу ту же проблему, что и вы.

Jörg W Mittag 30.03.2021 10:33

Кроме того, ваше описание ошибки неясно: что означает, что "кажется" повторяется снова и снова? Итак, вы имеете в виду, что это цикл не, но это только цикл выглядит как? idownvotedbecau.se/toomuchcodeidownvotedbecau.se/nomcve

Jörg W Mittag 30.03.2021 10:35

привет, извините, я все еще новичок в stackoverflow. и нет, он зацикливается, но он не перестанет зацикливаться даже после того, как число равно сгенерированному случайному числу

cpw 31.03.2021 09:49
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
1
3
32
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Основные проблемы:

  • Вы вызываете метод check два раза в методе main, вам нужно удалить первый.

  • Вам нужно переместить y = 0 из цикла while, чтобы иметь возможность return.

Пытался немного упростить ваш код, а вы могли бы попытаться улучшить его еще больше.

def check(rno, input)
  x = 1
  y = 0
    
  while x == 1      
    if rno == input
      puts "Bingo!"
      x = 0
    else
      if rno > input
        puts "Try a bigger number"
      else
        puts "Try a smaller number"
      end
      
      input = gets.chomp.to_i
      y = y + 1   
    end
  end
    
  return y
end

def main
  rno = rand(100)
  input = read_integer("Enter an integer between 0 and 100: ")
    
  times = check(rno, input)
  puts ("You have tried " + times.to_s + " times.")
end

Другие вопросы по теме