2010-10-06 68 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