如何更改下面的代码,以便当“BYE”连续三次在所有大写中被喊出时,它会退出代码? (否则计数器将重置为0
。代码应该从任何单词的所有大写字母中退出,因此BYE必须是对此规则的排除。
puts "say something to grandma"
number = rand(1900..2015)
while true
talking = gets.chomp
talking.downcase
puts "HUH?! SPEAK UP, SONNY!"
if talking == talking.upcase
puts "NO, NOT SINCE #{number + (1)}!"
break
end
end
答案 0 :(得分:2)
您几乎在问题中描述了解决方案:添加一个检查用户是否键入BYE
的条件。如果他们这样做,请在柜台加一个。如果计数器是3,break
;否则使用next
转到循环的顶部。如果他们没有键入BYE
,请将计数器重置为0.
puts "say something to grandma"
number = rand(1900..2015)
counter = 0
while true
talking = gets.chomp
puts "HUH?! SPEAK UP, SONNY!"
if talking == "BYE"
counter += 1
puts "You said 'BYE' #{counter} time(s)"
break if counter >= 3
next
end
counter = 0
if talking == talking.upcase
puts "NO, NOT SINCE #{number + 1}!"
break
end
end
一些注意事项:
您会注意到我删除了talking.downcase
。它没有做任何事情。我怀疑你打算使用downcase!
来修改字符串(而downcase
返回一个新的字符串,你没有做任何事情),但这会破坏代码(因为条件会永远不会是真的。)
而不是while true
,loop do
在Ruby中更具惯用性。
您可能想测试用户是否输入了任何内容,因为"" == "".upcase
为true
。
答案 1 :(得分:0)
我的代码中没有看到任何计数器。
如果要在“BYE”连续重复counter
次时退出循环,则需要有一个计数器。所以我添加了从0
开始的变量0
,并且每次都会重置为3
,调用“BYE”以外的单词。
如果它到达puts "say something to grandma"
number = rand(1900..2015)
counter = 0
while true
talking = gets.chomp
talking.downcase
puts "HUH?! SPEAK UP, SONNY!"
if talking == "BYE"
counter += 1
elsif talking == talking.upcase
counter = 0
puts "NO, NOT SINCE #{number + (1)}!"
break
else
counter = 0
end
if counter == 3
break
end
end
或者如果用户写了其他大写单词,它将从循环中断开,就像在原始脚本中一样。
protected void GridView_SelectedIndexChanged(object sender, EventArgs e){
string value = null;
value = GridView1.SelectedRow.Cells(2).Text.ToString();
}
答案 2 :(得分:0)
为了明白计数器是如何工作的,也许你可以使用每次用户回答counter
时填充'BYE'
的数组'BYE'
。如果用户回答 'BYE'
以外的任何,counter
将重置为[]
。基本上三个'BYE'
的行由数组counter = ['BYE', 'BYE', 'BYE']
表示。
代码可能是这样的:
counter = []
while counter != ['BYE', 'BYE', 'BYE']
puts "You're in a room with Deaf Grandma. Say something to her"
a = gets.chomp
if a == 'BYE'
counter << 'BYE'
elsif a == a.upcase
r = rand(21) + 1930
puts 'NO, NOT SINCE ' + r.to_s + '!'
counter = []
else
puts 'HUH?! SPEAK UP, SONNY!'
counter = []
end
end
请注意以上代码中的这一行:
while counter != ['BYE', 'BYE', 'BYE']
这确保while循环保持运行 counter
数组 NOT 等于['BYE', 'BYE', 'BYE']
。因此,如果counter
等于[]
或['BYE']
或['BYE', 'BYE']
,则while循环会继续运行。它仅在counter = ['BYE', 'BYE', 'BYE']
时停止。