Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 西纳特拉+;鲁比:每次我猜的时候,随机数总是在变化。范围问题?_Ruby_Random_Sinatra - Fatal编程技术网

Ruby 西纳特拉+;鲁比:每次我猜的时候,随机数总是在变化。范围问题?

Ruby 西纳特拉+;鲁比:每次我猜的时候,随机数总是在变化。范围问题?,ruby,random,sinatra,Ruby,Random,Sinatra,我正在使用Sinatra构建一个Web猜测器。我在浏览器的文本字段中输入一个数字。我点击提交,我应该得到一个回复,如果我的数字太低或太高(或在5以内)。我用猎枪来装服务器。我希望能够猜出一个数字,而不必每次猜的时候随机数都改变 代码: require 'sinatra' require 'sinatra/reloader' def check_guess(guess) if params["guess"].to_i == guess "You got it right!" e

我正在使用Sinatra构建一个Web猜测器。我在浏览器的文本字段中输入一个数字。我点击提交,我应该得到一个回复,如果我的数字太低或太高(或在5以内)。我用猎枪来装服务器。我希望能够猜出一个数字,而不必每次猜的时候随机数都改变

代码

require 'sinatra'
require 'sinatra/reloader'


def check_guess(guess)
if params["guess"].to_i == guess
        "You got it right!"
elsif params["guess"].to_i > guess 
    if params["guess"].to_i > (guess + 5)
        "Way too high!"
    else 
        "Close.. but too high!"
    end
elsif params["guess"].to_i < guess
    if params["guess"].to_i < (guess - 5)
        "Way too low!"
    else
        "Close.. but too low!"
    end
end
end 


# Home route
get '/' do 
    SECRET_NUMBER = rand(100)
    message = check_guess(SECRET_NUMBER)
    erb :index, :locals => { :message => message }
end
需要“sinatra”
需要“sinatra/重新装载机”
def检查\u猜测(猜测)
如果参数[“猜测”]。到_i==猜测
“你说得对!”
elsif参数[“猜”]。要猜
如果参数[“猜测”]。\u i>(猜测+5)
“太高了!”
其他的
“接近……但太高了!”
终止
elsif params[“猜”]。\u i{:message=>message}
终止

目前,我每次猜到一个新的随机数时都会得到一个新的随机数。我觉得这可能与我的秘密号码的范围有关。有什么想法吗?

每次有对
“/”
的GET请求时,都会执行相关的代码,从而生成一个新的
密码(带有警告)

处理这个问题的一种方法是,在第一次猜测(在这种情况下,应该生成一个秘密号码)和连续猜测(在这种情况下,不应该生成一个新的秘密号码)时,路由到不同的URL


此外,对随时间变化的内容使用常量也是一种非常糟糕的做法。

每次有对
“/”
的GET请求时,都会执行相关代码,这会生成(带有警告)一个新的
密码

处理这个问题的一种方法是,在第一次猜测(在这种情况下,应该生成一个秘密号码)和连续猜测(在这种情况下,不应该生成一个新的秘密号码)时,路由到不同的URL


此外,对随时间变化的内容使用常量也是非常糟糕的做法。

您可以将初始值存储在用户会话中,因为您必须在sinatra中启用会话

configure do
  enable :sessions
  set :session_secret, "somesecretstring" 
end
之后,您可以通过前往特定路线创建编号

get '/random' do
  session[:number] = rand(100)
end
然后,您可以在不同的路线上检查您的猜测

get '/checkguess' do
  check_guess(session[:number]) unless session[:number].nil?
end

这是基本思想,但你必须进一步定义它。希望它能对您有所帮助。您可以在用户会话中存储初始值,因为您必须在sinatra中启用会话

configure do
  enable :sessions
  set :session_secret, "somesecretstring" 
end
之后,您可以通过前往特定路线创建编号

get '/random' do
  session[:number] = rand(100)
end
然后,您可以在不同的路线上检查您的猜测

get '/checkguess' do
  check_guess(session[:number]) unless session[:number].nil?
end

这是基本思想,但你必须进一步定义它。希望它能帮你一点忙

我现在正在寻找完全相同的问题:

require "sinatra"
require "sinatra/reloader"

number = rand(100)

get '/' do
  guess = params["guess"].to_i
  message = check_guess(guess, number)
  erb :index, :locals => {:bok => number, :alert => guess, :msg => message}
end
把rng放在get块外就行了。生成的数字保持不变,直到您更改代码中的某些内容(即使在末尾添加空格并保存文件也会重新随机分配数字)或完全重新启动服务器

关于常数(SECRET_NUMBER),只给check_guess方法一个参数是有帮助的,因为您在顶部将其定义为常数。(因为我是ruby新手,如果我错了,有人可以纠正我。)

SECRET\u NUMBER=rand(100)
获取“/”执行。。。终止
def检查\u猜测(猜测)
如果猜测<秘密号码
“你猜得太低了!”
elsif guess>秘密号码
“你猜得太高了!”
其他的
“凝结!你猜对了:)”
终止

我现在正在搜索完全相同的问题:

require "sinatra"
require "sinatra/reloader"

number = rand(100)

get '/' do
  guess = params["guess"].to_i
  message = check_guess(guess, number)
  erb :index, :locals => {:bok => number, :alert => guess, :msg => message}
end
把rng放在get块外就行了。生成的数字保持不变,直到您更改代码中的某些内容(即使在末尾添加空格并保存文件也会重新随机分配数字)或完全重新启动服务器

关于常数(SECRET_NUMBER),只给check_guess方法一个参数是有帮助的,因为您在顶部将其定义为常数。(因为我是ruby新手,如果我错了,有人可以纠正我。)

SECRET\u NUMBER=rand(100)
获取“/”执行。。。终止
def检查\u猜测(猜测)
如果猜测<秘密号码
“你猜得太低了!”
elsif guess>秘密号码
“你猜得太高了!”
其他的
“凝结!你猜对了:)”
终止

适用于仍在寻找答案的任何人。rand应该在get块之外定义

require 'sinatra'
require 'sinatra/reloader'
rand = (rand() * 100).to_i
get '/' do

  "The secret number is #{rand}"
end

对于任何仍在寻找答案的人。rand应该在get块之外定义

require 'sinatra'
require 'sinatra/reloader'
rand = (rand() * 100).to_i
get '/' do

  "The secret number is #{rand}"
end

SECRET\u NUMBER
是一个建议。我不明白作者为什么使用常数,但我相信一定有很好的理由。你是说做一个像
GET'/blah blah'do…SECRET_NUMBER。。。结束
感谢您联系我们。也许建议您做一些类似于
GET'/new question
GET'/guess'
的事情。我不明白作者为什么使用常数,但我相信一定有很好的理由。你是说做一个像
GET'/blah blah'do…SECRET_NUMBER。。。结束
感谢您联系btw。可能类似于
GET'/new question
GET'/guess'