我试图回答Chris Pine的“学习编程”一书中的以下问题:
•写一个聋人奶奶计划。无论你对奶奶说什么(无论如何 你输入),她应该回答HUH ?!说起来,SONNY !,除非 你喊它(输入所有大写字母)。如果你喊,她可以听到你的声音 (或至少她这么认为)然后大喊大叫,不,不是从1938年开始!至 让你的节目真的可信,让奶奶大喊大叫 一年一次;也许在1930年到1950年之间随意的任何一年。(这 部分是可选的,如果您阅读本节,将会更容易 Ruby方法章节末尾的随机数生成器。) 在你喊BYE之前,你不能停止和奶奶说话。提示:不要 忘记chomp!输入的'BYE'与'BYE'不同 没有一个!提示2:尝试考虑程序的哪些部分 应该一遍又一遍地发生。所有这些应该在你的 while loop。
•延长你的聋奶奶计划:奶奶不要你怎么办? 离开?当你喊BYE时,她可以假装不听你的声音。 更改以前的程序,以便您必须三次喊BYE 连续。确保测试你的程序:如果你大喊BYE三 时间,但不是连续,你还应该和奶奶说话。
当我运行它时,我的代码给了我相同的“random_year”。为什么代码没有给我一个实际的随机年份(1930年到1950年之间)?
红宝石中的代码。
# 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
答案 0 :(得分:4)
您需要在循环内生成随机数。现在你在程序开始时生成它ONCE,然后它永远不会改变。基本上是:
while bye < 3
random_year = 1930 + rand(1950 - 1930) // move the random generation to here
puts 'NO, NOT SINCE ' + random_year.to_s
答案 1 :(得分:2)
您已在第一个代码行中为random_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)}"
答案 2 :(得分:0)
对于我已经使用过的练习:rand(1930..1950)