为什么我陷在这个While循环中?

问题描述

在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,以便用户可以使用不区分大小写的方式输入字符串,例如oddOdd等。
使用loop do ... end进行无限循环,然后将breakif一起使用,可以更轻松地退出循环。
循环创建了一个单独的作用域,因此我们需要使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};"