红宝石循环中的唯一兰特数

时间:2017-10-28 01:20:12

标签: ruby

我正在阅读“学习编程”这本书,我遇到了一个我遇到麻烦的练习。

year = (rand(1900...1990))
while true do
puts "What would you like to say to grandma?"
  ask = gets.chomp
  if 
    ask == ask.downcase
    puts "SPEAK UP SONNY"
  elsif  
    ask == ask.upcase
    puts "NO, NOT SINCE #{year}!"

  end

  break if ask == "BYE"
end

一切运作正常,但如果兰特数“年”出现不止一次,它会重复相同的数字。有没有办法让它在同一循环中出现时成为一个唯一的随机数?

提前谢谢

2 个答案:

答案 0 :(得分:0)

将年份分配移动到循环中,以便在每个选择之前分配它。

答案 1 :(得分:0)

year的值在循环内不会改变,因为它是在循环外定义的。如果定义在循环内移动,它会改变,但你可能还有多年的重复。要解决这两个问题,请更改

year = rand(1900...1990)

years = (1900...1990).to_a.shuffle

(在循环之外)并更改

puts "NO, NOT SINCE #{year}!"

puts "NO, NOT SINCE #{years.shift}!"

(或years.pop)。如果重复超过91次,则会引发异常。