Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 连续三次获取.chomp以退出_Ruby - Fatal编程技术网

Ruby 连续三次获取.chomp以退出

Ruby 连续三次获取.chomp以退出,ruby,Ruby,该任务摘自Chrise Pine的“学会编程”。这个节目叫“聋哑奶奶”。任务如下:“无论您键入什么,grandma(程序)都应回答以下问题: `HUH?! SPEAK UP, SONNY!` speak = gets.chomp while speak != 'BYE' puts 'HUH?! SPEAK UP, SONNY!' if speak == speak.upcase puts 'NO, NOT SINCE ' +

该任务摘自Chrise Pine的“学会编程”。这个节目叫“聋哑奶奶”。任务如下:“无论您键入什么,grandma(程序)都应回答以下问题:

    `HUH?! SPEAK UP, SONNY!`
    speak = gets.chomp 
     while speak != 'BYE' 
       puts 'HUH?! SPEAK UP, SONNY!'
     if speak == speak.upcase
       puts 'NO, NOT SINCE ' + (1930 + rand(20)).to_s + '!'
     else repeat = gets.chomp
     end
    end
除非你大声喊出来(输入所有大写字母)。在这种情况下,她回答:

    `NO, NOT SINCE 1938!`
让奶奶每次喊不同的一年,可能是1930年到1950年之间的任意一年。你必须连续三次喊再见。确保测试你的程序:如果你喊 再见三次,但不是一次又一次,你还应该和我说话 奶奶。” 现在,在我看来一切都很好,只是我没有找到放置
get.chomp
3次退出程序的位置。最后,我想到了这个:

    `HUH?! SPEAK UP, SONNY!`
    speak = gets.chomp 
     while speak != 'BYE' 
       puts 'HUH?! SPEAK UP, SONNY!'
     if speak == speak.upcase
       puts 'NO, NOT SINCE ' + (1930 + rand(20)).to_s + '!'
     else repeat = gets.chomp
     end
    end
但在这种情况下,如果我键入
BYE
奶奶仍然会问我:

    `HUH?! SPEAK UP, SONNY!`

我的问题是:在我连续三次键入
BYE
之后,如何正确地使程序退出?

看看这个,不过我做了一些更改。但是应该给你预期的输出

bye_count = 0
while true
  speak = gets.chomp
  if speak == 'BYE'
    bye_count +=1
    bye_count == 3 ? break : next
  end
  bye_count = 0 # Resets count
  if speak == speak.upcase
    puts 'NO, NOT SINCE ' + (1930 + rand(20)).to_s + '!'
  else
    puts 'HUH?! SPEAK UP, SONNY!'
  end
end

您还没有在代码中添加使用“bye”3次将退出程序的任何地方

而bye<3

尝试再次查看代码,并在3次“是”后执行更改以退出。

还有另一种方法:

responses = ["", "", ""]

loop do
  speak = gets.chomp
  responses.shift
  responses << speak
  break if responses.all? { |r| r == "BYE" }
  if speak == speak.upcase
    puts 'NO, NOT SINCE ' + (1930 + rand(20)).to_s + '!'
  else
    puts 'HUH?! SPEAK UP, SONNY!'
  end
end

是的,很好,谢谢你!我还没有学到任何关于“计数”的知识。
count
只是我使用的一个变量。我已将其重命名为
再见计数
,以使其更清晰。但这意味着,无论你是连续三次写拜拜,还是在两次写拜拜之间,它在3d时间之后仍然会中断。我怎样才能做到即使你打了两次BYE,第三次输入了不同的内容,你仍然需要从一开始就连续三次说BYE?我已经更新了答案,以满足这一标准。请参阅第8行,在那里我重置了
bye\u计数
我尝试了'while'bye'<3',但它说'String与3的比较失败'。我应该为“再见”做一个变量吗?上面的阿尔菲已经给了你你需要的答案。。。正如你正在学习的那样,我不想直接给你答案,但继续,你做得很好!我不知道我到底缺少了什么,但在我用“if speak==speak.upcase puts”完成代码后,它给了我一个错误“undefined local variable or method'speak'”。不,不是因为“+(1930+rand(21))。tos+!”还有别的吗?说出来,孩子结束我对没有测试我的代码的道歉。我最初写的是
doloop
,而不是
loopdo
。我还添加了
if speak==speak.upcase
代码。现在似乎很好用。是的,很好用。但是,是否可以修改此代码(使用相同的循环do),以便当你说再见时,她不会做出任何回应?如果speak==“BYE”之后插入一行
next if speak==“BYE”