随机报价生成器重复相同的报价,为什么?

时间:2018-07-24 13:29:15

标签: ruby shoes

大家好!有一个用Shoes制成的报价生成器。

    @think.click do
        @noun_nominative.shuffle
        @base.shuffle
        @thought.replace(@base.sample)
    end

    @noun_nominative = 
        [
            "word1", "word2", "word3", "word4",
            "word5", "word6", "word7", "word8"
        ]
    @noun_accusative = 
        [
            "word1", "word2", "word3"
        ]
    @base =
        [
        @noun_nominative.sample.capitalize + "regular quote",
        "Regular quote" + @noun_nominative.sample,
        "Regular quote" + @noun_accusative.sample,
        "Regular quote" + @noun_accusative.sample,
        @noun_nominative.sample.capitalize + "regular quote",
        "And another one base for a quote"
        ]       

它只是将 base 数组中的短语替换为 noun_nominative noun_accusative 中的随机词,每次按“ think”按钮时都会显示一个新引号点击。

该程序在每次单击时都应打上一个全新的报价,但是,它始终显示一次生成的相同短语。我如何才能在不重新打开程序的情况下重新生成报价?

谢谢您的回答!

1 个答案:

答案 0 :(得分:0)

您需要在每次点击时生成随机报价,而不是在应用启动时预先生成它们。这应该是您所做的最懒惰的更改:

def generate_random_quote(nominative, accusative)
  all_generated_quotes = [
    nominative.sample.capitalize + " - это всякий, кто стремится убить тебя, неважно на чьей он стороне.",
    "Иногда " + nominative.sample + " не попадает в " + accusative.sample + ", но " + nominative.sample + " не может промахнуться.",
    "Нет ничего труднее, чем гибнуть, не платя смертью за " + accusative.sample + ".",
    "Индивидуумы могут составлять " + accusative.sample + ", но только институты могут создать " + accusative.sample + ".",
    nominative.sample.capitalize + " - это тот человек, который знает о вас все и не перестает при этом любить вас.",
    "Трудно себе представить, что сталось бы с человеком, живи он в государстве, населенном литературными героями."
  ]

  all_generated_quotes.sample
end

@think.click do
  freshly_baked_random_quote = generate_random_quote(@noun_nominative, @noun_accusative)
  @thought.replace(freshly_baked_random_quote)
end

这当然是相当浪费的。它生成所有可能的报价,并丢弃除一个以外的所有报价。如果这是一个问题,那么解决该问题将是您的家庭作业。 :)

相关问题