2012-11-07 113 views
7

我目前在学习ruby,而且我已经陷入了这个问题:红宝石无限循环

写一个聋人祖母程序。无论你对奶奶说什么(无论你输入什么内容),她都应该回应HUH? SPEAK UP,SONNY!,除非你喊出来(输入所有大写字母)。如果你大喊,她会听到你的回声,不,从1938年起!为了让你的节目真正可信,每次奶奶都会有不同的年份;也许任何一年在1930年和1950年之间的任何一年。你不能停止与奶奶说话,直到你喊BYE。

这是我试过的代码:

puts "Say something to Grandma!" 
something = gets.chomp 
while something != "BYE" 
    if something == something.upcase 
     puts "NO, NOT SINCE 19" + (rand(30..50)).to_s + "!" 
    else 
     puts "HUH? SPEAK UP SONNY!" 
    end 
end 

每当我执行此,if和else字符串只是去一个无限循环。我在这里做错了什么?

+4

我不会说红宝石,但你''''一次*然后*开始'while'。这必然会导致无限循环,因为'something'永远不会改变。你可能不得不进入'while'语句,所以每次都会得到。另外'chomp'是我用脚本语言见过的最酷的命令。 –

+1

@Pekka:'chomp' - 掐掉换行符。 'gets' - 这个获得用户输入。备查。 :) –

+0

另外,字符串插值。 –

回答

6

你只得到了一次输入,你需要在每一个循环的开始读它,就像这样:

something="" 
while something != "BYE" 
    puts "Say something to Grandma!" 
    something = gets.chomp 
    if something == something.upcase 
     puts "NO, NOT SINCE 19" + (rand(30..50)).to_s + "!" 
    else 
     puts "HUH? SPEAK UP SONNY!" 
    end 
end 

希望是有道理的。

+0

当我尝试以下代码时出现以下错误:calc.rb:1:'

':未定义的局部变量或方法'something'for main:Object(NameError ) – user1429496

+0

对不起,在顶端添加'something =“”',看看编辑 – javanut13

+0

真棒,谢谢! – user1429496