Ruby会跳过if语句

时间:2016-09-07 16:11:16

标签: ruby

我有一个ruby程序,这里包含哈希值。基本上当用户输入l或p或sc时,它将检查计算机生成的密钥是否与第一个变量上的标准匹配w / c是播放器还是用户。如果它符合标准,它将返回你赢了。但如果不是它会让你松弛。否则如果它相同则打印出平局。

MY_CHOICES = { 
 'l' => 'light',
 'p' => 'paper', 
 'sc' => 'scan',
}

def test?(first, second)
  (first == 'p' && second == MY_CHOICES ['l']) ||
  (first == 'l' && second == MY_CHOICES ['p']) ||
  (first == 'sc' && second == MY_CHOICES ['sc']) ||
  (first == 'l' && second == MY_CHOICES ['l'])
end 

def print_results(player, computer)
  if test?(player, computer)
    puts("You won!")
  elsif test?(computer, player)
    puts("Computer won! You loose!")
  else
    puts("It's a tie!")
  end
end

puts "Enter a key: "
choice = gets().chomp()
computer_choice = MY_CHOICES.values.sample
print_results(choice, computer_choice)
puts("You chose: #{choice}, computer choose: #{computer_choice}"

使用上面的代码,我的代码正在跳过代码并始终打印"它是一个平局"我不知道我在这里失踪了什么。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

您正在获取用户的输入并针对'摇滚','纸张'和'剪刀'进行测试,但是您已声明用户正在输入'l','p'和'sc',因此请测试永远不会评估为真的

例如,将其保存为rps.rb并运行:

> ruby rps.rb 
Enter a key: 
rock
You won!
You chose: rock, computer choose: light

答案 1 :(得分:-2)

您是否尝试过修改代码:

def test?(player, computer)
  (player== 'rock' && computer== VALID_CHOICES['sc']) ||
  (player== 'paper' && computer== VALID_CHOICES['r']) ||
  (player== 'scissors' && computer== VALID_CHOICES['sc']) ||
  (player== 'paper' && computer== VALID_CHOICES['sp'])
end