2015-10-29 47 views
0

我决定我会做一个简单的无法通过的“摇滚,纸,剪刀”程序,它几乎完成,但有一个问题。需要输入用户的红宝石帮助

我希望user_input仅在被调用时才作出响应,但无论是否输入“摇滚”,它都会激活而不是输入“摇滚”,而程序以“计算机播放的纸张,您输了!它以“玩纸,你输了!”回应

played scissors, you lose! 
played rock, you lose! 

if #{user_input = rock} 
    puts "Computer played Paper, You Lose!" 

这是全码:

print "Rock, Paper or Scissors?\n" 
user_input = gets.chomp 
puts "You played #{user_input}!" 
if #{user_input = rock} 
    puts "Computer played Paper, You Lose!" 
end 

if #{user_input = paper} 
    puts "Computer played scissors, You Lose!" #code 
end 

if #{user_input = scissors} 
    puts "Computer played rock, You Lose!" 
end 

回答

1

首先,你需要使用==当你比较,你应该输入一个字符串进行比较。此外,您的逻辑可以使用elsif,因为没有必要三次测试输入,因为它只能匹配一个(或没有)值来表示:

if user_input == "rock" 
    puts "Computer played Paper, You Lose!" 
elsif user_input == "paper" 
    puts "Computer played scissors, You Lose!" 
elsif user_input == "scissors" 
    puts "Computer played rock, You Lose!" 
else 
    puts "Invalid input" 
end 

如果你想不区分大小写的比较,你可以使用casecmp代替像这样:

if user_input.casecmp("rock") 
1

在Ruby中的平等是==.eql

=是分配。

请将您的if s中的=替换为==

1

或者考虑一个case声明。请参阅 “How to write a switch statement in Ruby

case user_input 
when "rock" 
    puts "Computer played Paper, You Lose!" 
when "paper" 
    puts "Computer played scissors, You Lose!" 
when "scissors" 
    puts "Computer played rock, You Lose!" 
else 
    puts "Invalid input" 
end 

或者更冷淡:

computer_plays = case user_input 
        when "rock" 
        "paper" 
        when "paper" 
        "scissors" 
        when "scissors" 
        "rock" 
        end 
puts "Computer played #{computer_plays}, You Lose!" if computer_plays 
+0

你的 “干” 版本缺少错误处理 –

+0

真的 - 考虑到OP的经验水平,我只是想介绍一个不同的概念 - 忘记过去我要去的链接 – Greg

+0

这也不错。 – jpw

2

这里有一个免费的条件版本(不处理不正确的输入,虽然)

winning_moves = { 
    'rock' => 'paper', 
    'scissors' => 'rock', 
    'paper' => 'scissors', 
} 

puts "Computer played #{winning_moves[user_input]}, You Lose!" 
+0

我喜欢这个,更多Rubyesque – jpw