【问题标题】:I am trying to execute an IF statement while executing a method in Ruby我正在尝试在 Ruby 中执行方法时执行 IF 语句
【发布时间】:2020-10-08 19:19:00
【问题描述】:

我正在为我的 Ruby 课程编写一个淡化的二十一点游戏,我在实现我的 hit 或 stay 函数方法后挂断了电话。它没有启动它下面的while 语句。希望有人能告诉我语法是关闭还是缩进错误。

def prompt_user()
  puts 'Would you like another card? Press y or n'
  hit_stay = gets.chomp
  while hit_stay == 'y' ||'n'
    if hit_stay == 'y'
      puts "Your cards are"
      puts $cards.append(num())
      puts "Your total card count is"
      puts $cards.sum
      return true
    elsif hit_stay == 'n'
      puts 'your total is'
      puts $cards.sum
      return true
    else
      puts ' This is not a valid option.'
      return false
    end
  end
end

这似乎是程序有点古怪的地方。

prompt_user()
while prompt_user() == 'y' || 'n'
  $cards.sum <= 15
  prompt_user()
  if prompt_user() == 'n'
    puts 'Your final card count is.'
    puts $cards.sum
  end
  if 15 < $cards.sum <21
    puts 'Your final card count is.'
    puts $cards.sum
  elsif $cards.sum > 21
    puts 'Game Over You Bust'
  end
end

我对编写代码有点新,我知道我需要对其进行一些清理,但对此有点强调。

【问题讨论】:

  • 请始终尝试使用您正在使用的编程语言标记您的问题。这样您就可以吸引更多相关人员来回答您的问题,并且不会打扰其他忽略了某些特定标签或不擅长您使用的技术的人。
  • 对此感到抱歉。我会记下未来的!
  • ==operator precedence 高于 ||。因此,while hit_stay == 'y' ||'n' 等价于while (hit_stay == 'y') || 'n'。如果hit_stay #=&gt; 'y' 我们得到while true'n' 不被检查)。如果hit_stay 是任何其他值hit_stay == 'y' #=&gt; false,则表达式简化为while 'n'。由于'n'truthy(即既不是nil 也不是false),这也等同于while true。因此,一个人永远不会跳出while 循环。

标签: ruby methods while-loop


【解决方案1】:

这不是直接回答您的问题,但首先,prompt_user() == 'y' || 'n' 可能不是您想要做的 - 这将始终返回 true,因为它说“如果 prompt_user() 的结果等于则执行此操作'y', or if 'n'" 但是,'n' 本身只是一个字符串而不是条件,并且非空字符串将评估为真,因此无论用户的输入是什么,这将始终为真。要了解我的意思,请尝试执行puts "hello!" if 'n',您会看到“你好!”。你可能想要的是hit_stay == 'y' || hit_stay == 'n' 或者更好的['y','n'].include?(hit_stay)

在代码的第二部分,您到处调用prompt_user,并检查其结果是否等于“y”或“n”,但在实际方法...我认为您要做的只是调用 prompt_user 直到它返回 false 在这种情况下您想要更接近此的东西:

while prompt_user
  $cards.sum <= 15
  if prompt_user() == 'n'
    puts 'Your final card count is.'
    puts $cards.sum
    if 15 < $cards.sum <21
      puts 'Your final card count is.'
      puts $cards.sum
    elsif $cards.sum > 21
      puts 'Game Over You Bust'
    end
  end
end

但是,此代码仍然无法工作,因为 15 &lt; $cards.sum &lt; 21 不是有效的 ruby​​,应该是 15 &lt; $cards.sum &amp;&amp; $cards.sum &lt; 21。这是你所拥有的一个更加修补的版本,它仍然需要努力使其完美(比如在你破产后退出),但我会把它留给你:

$cards = []
def num
  5
end

def prompt_user()
  puts 'Would you like another card? Press y or n'
  hit_stay = gets.chomp
  while ['y','n'].include?(hit_stay)
    if hit_stay == 'y'
      puts "Your cards are"
      puts $cards.append(num())
      puts "Your total card count is"
      puts $cards.sum
      return true
    elsif hit_stay == 'n'
      puts 'your total is'
      puts $cards.sum
      return true
    else
      puts ' This is not a valid option.'
      return false
    end
  end
end

while prompt_user
  $cards.sum <= 15
  puts 'Your final card count is.'
  puts $cards.sum
  if 15 < $cards.sum && $cards.sum < 21
    puts 'Your final card count is.'
    puts $cards.sum
  elsif $cards.sum > 21
    puts 'Game Over You Bust'
  end
end

PS。我还要指出,在变量名中使用 $ 符号不是典型的 ruby​​ 事物,您应该只使用字母数字字符。 @ 用于实例/类变量,但这可能不是您想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-22
    • 2021-11-14
    • 1970-01-01
    • 2020-01-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    相关资源
    最近更新 更多