Ruby 红宝石剪刀

Ruby 红宝石剪刀,ruby,if-statement,Ruby,If Statement,我必须执行石头、布、剪刀游戏的一小部分作为作业。这是我的密码: class RockPaperScissors # Exceptions this class can raise: class NoSuchStrategyError < StandardError ; end def self.winner(player1, player2) # YOUR CODE HERE puts "player1 = " + player1[1] if (p

我必须执行石头、布、剪刀游戏的一小部分作为作业。这是我的密码:

class RockPaperScissors

  # Exceptions this class can raise:
  class NoSuchStrategyError < StandardError ; end

  def self.winner(player1, player2)
    # YOUR CODE HERE

    puts "player1 = " + player1[1]
    if (player1[1] || player2[1] != 'R') || (player1[1] || player[2] != 'P') || (player1[1] || player2[1] != 'S')
      raise NoSuchStrategyError.new("Strategy must be one of 'R','S','P'")
    else
      if player1[1] == player2[1]
        return player1
      elsif (player1[1] == 'R' && player2[1] == 'P') || (player1[1] == 'P' && player2[1] == 'S') || (player1[1] == 'S' && player2[1] == 'R')
        return player2
      else 
        return player1
      end
    end
  end

  def self.tournament_winner(tournament)
    # YOUR CODE HERE
  end

end

编辑:player1和player2是格式为[“playername”,“move”]的数组,对于石头、剪刀或布,移动为R、S或p可能会引起兴趣。这是因为
if
条件。实际上,您正在尝试检查
player1[1]
player2[1]
的值是否分别为“R”、“S”、“P”。但是,在编码时,您指示ruby查看
player1[1]
值,如果
null
false
,则继续并检查
player2[1]!=if((player1[1]!='R'| | player2[1]!='R')|……
@Surya这是我根据您的消息将其更改为的内容,但它仍将进入方法
(player1[1]!='R'| | player2[1]!='R'| |(player1[1]!='P'| | | player1[2]!='s'(player1[1241])
现在,您可能会在使用
|
时遇到问题。您在上面粘贴的行中说,如果值不是R或值不是P或值不是S。因此,如果值是S,第一个块将为true,这将使语句的其余部分短路。我想您要查找的是
(player1[1]!='R'| player2[1]!='R')和&(player1[1]!='P'| player[2]!='P')和&(player1[1]!='S'| player2[1]!='S')
Failures:

  1) RockPaperScissors game rock breaks scissors [10 points]
     Failure/Error: raise NoSuchStrategyError.new("Strategy must be one of 'R','S','P'")

     RockPaperScissors::NoSuchStrategyError:
       Strategy must be one of 'R','S','P'
     # ./lib/rock_paper_scissors.rb:11:in `winner'
     # ./spec/rock_paper_scissors_spec.rb:10:in `block (3 levels) in <top (required)>'