Ruby 连续三次获取.chomp以退出
该任务摘自Chrise Pine的“学会编程”。这个节目叫“聋哑奶奶”。任务如下:“无论您键入什么,grandma(程序)都应回答以下问题: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 ' +
`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”
。