【问题标题】:Why is my while loop getting stuck? Did I forget a step?为什么我的 while 循环卡住了?我忘了一步吗?
【发布时间】:2013-09-08 10:00:10
【问题描述】:

我仍在努力完成一些练习,我确信这不是第一次在堆栈中提出这个问题......但我有兴趣以我会的方式来解决这个问题解释来编写代码,所以我希望得到一些帮助来弄清楚如何使我的方法起作用。

这是猪拉丁语:) 基本上。如果你在变量中输入一个词......或两个词,它应该将这些词翻译成所谓的猪拉丁语。 Pig latin 使用 hello 之类的词并将其更改为 ellohay。在猪拉丁语中,单词必须以元音开头。所以你甚至可以有“关闭”这个词,它应该说“osedclay”。我决定用一个while循环来解决这个问题。虽然我的 rspec 检查适用于前两个检查...当它开始检查第三个单词(恰好是“cherry”)时,它似乎陷入了无限循环

有人想吗?

def translate(word)
separated = word.split("")
while separated[0] !=("a" || "e" || "i" || "o" || "u")
    letter = separated.shift
    separated << letter
    separated
end
    word = separated.join("")
    word + "ay"
end

【问题讨论】:

    标签: ruby string rspec while-loop infinite


    【解决方案1】:

    != 运算符的工作方式与您想象的不同。

    while separated[0] !=("a" || "e" || "i" || "o" || "u")
    

    上面的行相当于

    while separated[0] != 'a'
    

    如果您的单词中没有“a”,则循环是无限的。你应该重写你的条件

    while !'aeiou'.include?(separated[0])
    

    我知道,我会用正则表达式...

    这是该方法的较短版本

    def translate(word)
      # you can make one-liner out of it.
      leading_consonants_regex = /^([bcdfghjklmnpqrstvwxyz]+)(.*)/
      word.sub(leading_consonants_regex, '\\2\\1ay')
    end
    
    translate('sheep') # => "eepshay"
    translate('dog') # => "ogday"
    translate('closed') # => "osedclay"
    translate('cherry') # => "errychay"
    

    【讨论】:

      猜你喜欢
      • 2019-09-15
      • 1970-01-01
      • 1970-01-01
      • 2018-07-02
      • 2014-01-25
      • 1970-01-01
      • 1970-01-01
      • 2016-11-01
      • 1970-01-01
      相关资源
      最近更新 更多