elsif没有工作,继续投入,如果输入

时间:2015-08-12 17:20:59

标签: ruby

在我的代码中,elsif不起作用。如果我输入"N""n",它会向我询问密码,而不是puts,它应该执行此操作:

puts "Would you like to access Your Software Wizard?"
puts "Type Y for Yes and N for No"
answer = gets.to_s
y = "yes"
n = "no"
Y = "yes"
N = "no"
if answer == y or Y
  puts " Please Insert Password:"
  password = gets.to_s
elsif answer == n or N
  puts "Quitting..... an Alert Email and an Alert Sms has been sent to  User of attempted access"
  puts "Password has been changed and newly encripted"
  puts "Good Bye"
end

我做错了什么?

2 个答案:

答案 0 :(得分:4)

if answer == y or Y更改为if answer == y || answer == Yif [y, Y].include?(answer)(同样适用于elsif条件)。

answer == y or Y测试的answer等于y的值,或者是Y的值为true。当您将其设置为有效字符串时,Y的值将始终为true。

答案 1 :(得分:0)

您的代码中存在多个问题但是您遇到了一个最常见的问题,即对gets的工作方式的误解:

  1. answer=gets.to_s不会返回您的想法。考虑这个IRB会话,我输入 1 返回

    >> gets
    1
    "1\n"
    

    gets返回一个以“\ n”结尾的字符串,当按下 Return Enter 时输入该字符串。

  2. 使用to_s没有帮助,因为gets已经返回了一个字符串。与上面的示例一样,我输入了1

    >> gets.class
    1
    String < Object
    
  3. 比较gets的输出必须以某种方式允许尾随“\ n”:

    >> gets.strip
    1
    "1"
    >> gets.chomp
    1
    "1"
    >> gets == "1\n"
    1
    true
    >> gets.chomp == '1'
    1
    true
    
  4. 了解所有这些,冥想:

    >> answer = gets.chomp.downcase
    YES
    "yes"
    >> answer == 'yes'
    true
    

    您也有逻辑错误,因为您无法使用if answer == y or Yanswer == n or N,但https://stackoverflow.com/a/31971730/128421已涵盖此内容。