ruby - 如何重复使用随机字母

标签 ruby random

我试图让我的代码随机生成一个字母来开始每个单词“zip”、“zap”和“zop”。每次运行代码时都应选择不同的字母,但每个单词都需要以相同的字母开头。

我似乎无法让它重复使用随机字母三次:

def generate
  puts "3... 2... 1... IMPROV: (enter any letter)"
  text = gets.chomp.upcase
  puts text + "IP, " + text + "AP, " + text + "OP!"
  puts "My turn!"
  yield
  puts g_l(1) + "IP, " + "#{g_l(1)}AP, " + "#{g_l(1)}OP!" 
end

generate do 
  def g_l(number)
    charset = Array('A'..'Z') - Array["A", "E", "I", "O", "U"]
    Array.new(number) { charset.sample } .join
  end
end

我的目标:

Run 1: HIP, HAP, HOP!
Run 2: DIP, DAP, DOP!
Run 3: SIP, SAP, SOP!

我得到的:

Run 1: HIP, ZAP COP
Run 2: FIP, WAP, DOP
Run 3: RIP, TAP, BOP

我尝试使用诸如“生成相同的随机字母”、“重复使用随机字母”、“存储随机数”等术语来查找结果,但这些搜索没有帮助。

最佳答案

每次使用 g_l(1) 时都会重新采样 而是保存 char = g_l(1) 并重复使用相同的 char

def generate
    puts "3... 2... 1... IMPROV: (enter any letter)"
        text = gets.chomp.upcase
    puts text + "IP, " + text + "AP, " + text + "OP!"
    puts "My turn!"
    yield
    char = g_l(1)
    puts char + "IP, " + "#{char}AP, " + "#{char}OP!"
end

generate do
    def g_l(number)
       charset = Array('A'..'Z') - Array["A", "E", "I", "O", "U"]
       Array.new(number) { charset.sample } .join
    end
end

或者让整个事情成为一个你可以调用的函数:

def answer
    puts "3... 2... 1... IMPROV: (enter any letter)"
    text = gets.chomp[0].upcase # Should they be able to type more than one letter?
    charset = Array('A'..'Z') - Array["A", "E", "I", "O", "U"]
    puts text + "IP, " + text + "AP, " + text + "OP!"
    puts "My turn!"
    char = charset.sample
    puts char + "IP, " + "#{char}AP, " + "#{char}OP!"
end

answer

关于ruby - 如何重复使用随机字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43285788/

相关文章:

ruby - 如何像 instance_eval 方法那样在一个 block 中改变 self 呢?

ruby - Mongoid 嵌入式文档上的类方法

c++ - 我不明白为什么我生成的随机数没有正确存储

ruby - 在命令行中使用 t 回复推文

ruby-on-rails - 将日期解析为 Rails 友好的格式

ruby - 理性 - ruby 中的原始数字

c# - 稳定分布的随机数?

javascript - 如何正确编写异步加载函数的代码

python - 机器人框架-生成随机数据

javascript - 在纸牌游戏中插入概率