Ruby:rand方法并没有给我一个真正的随机数

Ruby:rand方法并没有给我一个真正的随机数,ruby,random,Ruby,Random,我试图回答Chris Pine《学习编程》一书中的以下问题: •编写一个聋哑奶奶程序。不管你对奶奶说什么 你输入了),她应该回答,嗯?!说出来,孩子!,除非 你喊出来(用大写字母输入)。如果你大声喊叫,她能听见 (或者至少她是这么认为的)并大声回应道:不,从1938年以来就没有过!到 让你的计划真的可信,让奶奶喊一个不同的名字 每年一次;可能是1930年到1950年间任意一年。(本 part是可选的,如果您阅读上的部分,将更容易 Ruby的随机数生成器位于方法一章的末尾。) 你不能停止和奶奶说话

我试图回答Chris Pine《学习编程》一书中的以下问题:

•编写一个聋哑奶奶程序。不管你对奶奶说什么 你输入了),她应该回答,嗯?!说出来,孩子!,除非 你喊出来(用大写字母输入)。如果你大声喊叫,她能听见 (或者至少她是这么认为的)并大声回应道:不,从1938年以来就没有过!到 让你的计划真的可信,让奶奶喊一个不同的名字 每年一次;可能是1930年到1950年间任意一年。(本 part是可选的,如果您阅读上的部分,将更容易 Ruby的随机数生成器位于方法一章的末尾。) 你不能停止和奶奶说话,除非你大声说再见。提示:不要 忘了嚼吧带回车的“再见”与“再见”不同 没有一个!提示2:试着想想你的程序的哪些部分 应该一次又一次地发生。所有这些都应该放在你的电脑里 while循环

•扩展你的聋哑奶奶计划:如果奶奶不想要你怎么办 离开?当你大声说再见时,她可以假装没听见。 改变你以前的节目,这样你就必须大声说再见三次 在一行确保测试你的程序:如果你大声说再见 好几次了,但不是连续几次,你还是应该和奶奶谈谈

当我运行代码时,它会给我相同的“随机年”。为什么代码没有为我提供一个实际的随机年份(1930年到1950年之间)

用ruby编写代码

# Deaf Grandma

random_year = 1930 + rand(1950 - 1930)

puts 'WHAT DO YOU WANT KID?'

bye = 0
talk_to_grandma = nil

while bye < 3 
  talk_to_grandma = gets.chomp
  if talk_to_grandma == "BYE"
    puts 'NO, NOT SINCE ' + random_year.to_s
    bye+=1
    elsif talk_to_grandma == talk_to_grandma.upcase
      puts 'NO, NOT SINCE ' + random_year.to_s 
      bye = 0
    else  
      puts "HUH?! SPEAK UP, SONNY!"
      bye = 0
  end
end
#聋奶奶
随机年份=1930+兰特(1950-1930)
“你想要什么,孩子?”
再见=0
与祖母交谈=无
再见<3
与祖母交谈=得到.chomp
如果和奶奶说话=“再见”
将“不,不是因为”+随机年份添加到
再见+=1
elsif talk_to_grandma==talk_to_grandma.upcase
将“不,不是因为”+随机年份添加到
再见=0
其他的
“啊?!说出来,孩子!”
再见=0
结束
结束

您需要在循环中生成随机数。现在,您在程序开始时生成了一次,然后它就永远不会更改。基本上:

while bye < 3 
    random_year = 1930 + rand(1950 - 1930)  // move the random generation to here
    puts 'NO, NOT SINCE ' + random_year.to_s
而bye<3
random_year=1930+rand(1950-1930)//将随机生成移动到此处
将“不,不是因为”+随机年份添加到

您需要在循环中生成随机数。现在,您在程序开始时生成了一次,然后它就永远不会更改。基本上:

while bye < 3 
    random_year = 1930 + rand(1950 - 1930)  // move the random generation to here
    puts 'NO, NOT SINCE ' + random_year.to_s
而bye<3
random_year=1930+rand(1950-1930)//将随机生成移动到此处
将“不,不是因为”+随机年份添加到

您已经为第一个代码行中的
随机年份
变量指定了一个值。它是随机选择的

每次打电话给

puts 'NO, NOT SINCE ' + random_year.to_s 
可以访问/读取变量,但不能修改

您可能希望将随机年份生成封装在一个方法中:

def random_year( start=1930, range = 20 )
  start + rand( range )
end
然后你可以这样使用它:

puts "NO, NOT SINCE #{random_year}"
或者,对于年纪稍大的祖母:

puts "NO, NOT SINCE #{random_year(1910, 50)}"

您已经为第一个代码行中的
随机\u year
变量指定了一个值。它是随机选择的

每次打电话给

puts 'NO, NOT SINCE ' + random_year.to_s 
可以访问/读取变量,但不能修改

您可能希望将随机年份生成封装在一个方法中:

def random_year( start=1930, range = 20 )
  start + rand( range )
end
然后你可以这样使用它:

puts "NO, NOT SINCE #{random_year}"
或者,对于年纪稍大的祖母:

puts "NO, NOT SINCE #{random_year(1910, 50)}"

对于我使用过的练习:
rand(1930..1950)
对于我使用过的练习:
rand(1930..1950)
顺便说一句,你可以使用一个范围:
random\u year=rand(1930..1950)
这个问题应该显示你的程序是如何运行的:你运行它的一份记录,然后你指出它的行为和它应该如何表现之间的区别是好的。顺便说一句,你可以使用一个范围:
random\u year=rand(1930..1950)
这个问题应该显示你的程序的行为:你运行它的记录,然后你指出它的行为方式和它应该如何表现之间的区别是好的。只是确定一下这里的命名:这也不是标题所说的“真正的”随机数,而是一个随机数。真正的随机数只能通过真正的随机过程生成,而计算机是最“无序”的东西之一。这里的命名是确定的:这也不是标题所说的“真正的”随机数,而是一个随机数。真正的随机数只能由真正的随机过程生成,而计算机是最“无序”的东西之一。