问题描述
在Ruby中循环
我认为问题很简单,但我不太了解。当我回答正确的选项时,它可能是“甚至”或“不均匀”,它会反复问我一个问题。它认为问题出在or
运算符
puts 'Which numbers do you want to see,the even or uneven ones?'
answer = gets.chomp
while answer != 'Uneven' or answer != 'Even'
puts 'Please answer Even or Uneven.'
answer = gets.chomp
end
是否有一种方法可以编写一个while
循环,并带有2个这样的选项?
解决方法
首先,条件应通过 and
而非or
进行关联。
puts 'Which numbers do you want to see,the even or uneven ones?'
answer = gets.chomp
while answer != 'Even' and answer != 'Uneven'
puts 'Please answer Even or Uneven.'
answer = gets.chomp
end
第二,可以进一步改进代码:
不要重复自己:在循环中移动gets.chomp
。
添加downcase
,以便用户可以使用不区分大小写的方式输入字符串,例如odd
,Odd
等。
使用loop do ... end
进行无限循环,然后将break
与if
一起使用,可以更轻松地退出循环。
循环创建了一个单独的作用域,因此我们需要使cur_answer
在外部作用域中可见。为此,请使用cur_answer
使循环返回break cur_answer
(带有参数的break
将返回该参数)。
使用所需值和include?
的数组替换重复的!=
运算符。可以使用Percent Strings
(此处为%w[...]
)轻松地创建字符串数组。
#!/usr/bin/env ruby
puts 'Which numbers do you want to see,even or odd ones?'
answer = loop do
cur_answer = gets.chomp.downcase
break cur_answer if %w[ even odd ].include? cur_answer
puts 'Please answer even or odd.'
end
puts "answer=#{answer};"