2010-10-06 54 views
8

好吧,我正在尝试写一个奶奶模拟我的祖母。我不能完全按照我想要的方式工作。我想奶奶与回应红宝石循环与奶奶

“哦,让我想起了BACK IN(随机年)......的”

当你回答她的全部大写,但我也希望她能有回应

“你在说什么?”

当你不使用全部大写。我可以让每个人分开工作,但我似乎无法用她疯狂的回答连续做出奶奶的循环。下面的代码:

puts 'HELLO SONNY! WHAT\'S NEW IN THE WHO\'S IT WHAT\'S IT?' 
response = gets.chomp 

while response == response.upcase 
    puts 'OH, THAT REMINDS ME OF BACK IN ' + (rand(50) + 1905).to_s + '...' 
    response = gets.chomp 
end 

while response != response.upcase 
    puts 'WHAT\'D YOU SAY????' 
    response = gets.chomp 
end 

任何想法?

+3

下车我的草坪! – 2010-10-06 23:05:43

+0

由于您刚开始学习Ruby(我开始使用相同的教程),我只想指出,如果您使用双引号而不是单引号,则不必在字符串中转义字符。在这些简单的情况下很方便。 – 2010-10-07 04:53:30

回答

7

问题是,一旦你退出第一个while循环,你永远不会回到它。尝试这样的:

while true 
    response = gets.strip 
    if response == response.upcase 
    puts msg1 
    else 
    puts msg2 
    end 
end 

这将永远运行,直到你决定用Ctrl-C杀死虚拟奶奶。

+0

太好了,那固定了她!使用.strip over .chomp有什么好处? – 585connor 2010-10-06 23:04:37

+0

我喜欢它,因为它可以处理任何类型的前导空白和尾随空白,chomp只会拖曳尾随的换行符。在这种情况下,你并不需要。 – perimosocordiae 2010-10-06 23:21:52

+0

“kill virtual-granny” - 这只是错误的... – 2010-10-07 22:28:21

0

这个程序的工作原理,虽然我是一个noob,所以它可能不是最好的方法。另外我的数学更具创造性,因此更实用,其他人更好。 :)

puts 'Talk to your grandma!' 

while true 
    say = gets.chomp 

    if say == say.downcase 
    puts 'WHAT DID YOU SAY? SPEAK UP!' 

    else say == say.upcase 
    puts "NO HONEY, NOT SINCE 19" + (rand(90) + 10).to_s 

    end 

    break if say == 'bye'.upcase 

end