【问题标题】:Ruby - If "yes" abc... end if "no" xyzRuby - 如果“是” abc ...结束如果“否” xyz
【发布时间】:2016-03-22 01:50:15
【问题描述】:

我正在研究 ruby​​ 语法。这就是我所拥有的:

puts "Do you like books?"
if "yes" 
  puts "I do too"
end
if  "no"
  puts "Movies better"
end

当我保存并运行这段代码时,什么也没有发生。 我希望它显示基于 是或否的答案。 我如何重写它才能工作?

【问题讨论】:

  • 粘贴您使用的代码。
  • 什么都没发生,因为query既不是"yes"也不是"no",而是"Do you like books?"
  • 我用过这个,但是没用;放“你喜欢书吗?”如果“是”结束“我也是”如果“否”结束“电影更好”
  • 您将query 的值设置为"Do you like books?"。然后,您正在检查 query 是否具有值 "yes" 而它没有(值 "yes" 与值 "Do you like books?") so the first if 不一样)然后您检查 query 是否具有值 @987654334 @ 它也没有(值"no" 与值"Do you like books?"). So the second if` 不同。因此,您的程序什么也不输出。
  • 您无需执行任何操作来实际捕获答案,例如,stackoverflow.com/q/2889720/438992

标签: ruby if-statement boolean


【解决方案1】:

这是一种更好的表达方式:

puts "Do you like books?"

case (gets.chomp)
when 'yes'
  puts "I do too"
when 'no'
  puts "Movies better"
else
  puts "I don't know what you mean."
end

case 语句非常适合同时拆分多个路径。 gets 从用户那里获取输入。 chomp 删除自动包含的换行符。

【讨论】:

  • 哇!非常感谢塔德曼。我试过了,它有效。现在我将检查每一行以准确掌握如何正确编写。我很感激
  • 很高兴听到!在学习 Ruby 时,请确保您手头有一个非常好的参考资料。我从pickaxe book 开始,但是一旦你知道去哪里看,core documentation 也很不错。
【解决方案2】:

您需要使用gets 获取用户的输入并将其存储在变量中。 它看起来像这样:

puts "Do you like this?"
answer = gets.strip

if answer.downcase == "yes"
  puts "Me too"
else
  puts "Whyyyy?"
end

注意:

strip 基本上删除了换行符。

downcase 是将字符串全部小写。所以不管“是”还是“是”,它永远都是真的。

【讨论】:

    【解决方案3】:

    您的意图是要求用户输入并做出相应的回应吗?

    如果是这样,这里的其他答案提供了仅使用内置 Ruby 工具的方法示例(使用 gets.chomp)。但是,如果您不介意安装一个额外的库(或 gem,用 Ruby 术语表示),您可以这样做:

    gem install highline
    

    然后重写你的代码如下:

    require 'highline'
    
    if HighLine.agree("Do you like books? ") # note added space; more below.
      puts "I do too" # if they answer yes or y, in any capitalization
    else
      puts "Movies better" # if they answer no or n, in any capitalization
    end
    

    这会提示用户问题Do you like books?,后跟一个空格,并将光标留在同一行以供输入(如果不需要该部分,请删除空格并打印换行符)。然后它等待输入并对其进行验证,如下所示:

    1. 如果用户键入“yes”或“y”(或“Yes”,“YES ”,甚至是“yEs”——但不是“yes”),HighLine.agree 将返回 true,而你的 puts 的“我愿意太”将运行。
    2. 如果用户键入“no”或“n”(任何大小写),HighLine.agree 将返回 false,而您的 puts 将返回“电影更好”将运行。
    3. 如果有任何其他输入,HighLine.agree 将不会返回,而是提示用户“请输入“是”或“否”。”,然后再次重复该问题。李>

    使用这样的库的好处是其他人已经花时间思考边缘情况、常见的速记(如“y”代表“是”)等,并让代码用一个方法处理所有这些打电话。

    此外,如果您将require 行更改为:

    require 'highline/import'
    

    ...然后agree(以及其他几个HighLine功能)将为您导入,因此您可以在使用时简单地输入agree而不是HighLine.agree

    还有documentation on HighLine 可用(它还有许多其他功能,包括生成基于文本的菜单、为文本着色等),source code 也是如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      • 1970-01-01
      • 2013-07-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      相关资源
      最近更新 更多