Ruby If-Else语法评估
我不明白为什么我的If-else语句不能正常工作,如果我输入'y',它就会计算If-else语句的最后一部分Ruby If-Else语法评估,ruby,if-statement,Ruby,If Statement,我不明白为什么我的If-else语句不能正常工作,如果我输入'y',它就会计算If-else语句的最后一部分 puts('give 1: ') nr1= Integer(gets) puts('give 2: ') nr2= Integer(gets) selection = gets.to_s if (selection == "y".upcase) puts "Result is #{nr1+nr2}" elsif (selection =="v".upcase) puts "R
puts('give 1: ')
nr1= Integer(gets)
puts('give 2: ')
nr2= Integer(gets)
selection = gets.to_s
if (selection == "y".upcase)
puts "Result is #{nr1+nr2}"
elsif (selection =="v".upcase)
puts "Result is #{nr1-nr2}"
else (selection == "k".upcase)
puts "Result is #{nr1*nr2}"
end
你找不到方法了。因为\n
被附加到STDIN,您可以使用\chomp
删除它
2.2.2 :032 > selection = gets
y
=> "y\n"
2.2.2 :033 > selection.chomp
=> "y"
您可以按如下方式更新代码:
selection = gets.to_s.chomp.upcase
if selection == 'Y'
puts "Result is #{nr1+nr2}"
elsif selection == 'V'
puts "Result is #{nr1-nr2}"
elsif selection == 'K'
puts "Result is #{nr1*nr2}"
else
puts 'Invalid input'
end
尽管如此,rubycase
最适合这里。比如:
case selection.upcase
when 'Y'
puts "Result is #{nr1 + nr2}"
when 'V'
puts "Result is #{nr1 - nr2}"
when 'K'
puts "Result is #{nr1 * nr2}"
else
puts "Invalid input. Please provide a valid input [Y/V/K]"
end
你找不到方法了。因为\n
被附加到STDIN,您可以使用\chomp
删除它
2.2.2 :032 > selection = gets
y
=> "y\n"
2.2.2 :033 > selection.chomp
=> "y"
您可以按如下方式更新代码:
selection = gets.to_s.chomp.upcase
if selection == 'Y'
puts "Result is #{nr1+nr2}"
elsif selection == 'V'
puts "Result is #{nr1-nr2}"
elsif selection == 'K'
puts "Result is #{nr1*nr2}"
else
puts 'Invalid input'
end
尽管如此,rubycase
最适合这里。比如:
case selection.upcase
when 'Y'
puts "Result is #{nr1 + nr2}"
when 'V'
puts "Result is #{nr1 - nr2}"
when 'K'
puts "Result is #{nr1 * nr2}"
else
puts "Invalid input. Please provide a valid input [Y/V/K]"
end
养成的一个好习惯是将其分解成适当的
案例
陈述:
case (selection.upcase)
when 'Y'
puts "Result is #{nr1+nr2}"
when 'V'
puts "Result is #{nr1-nr2}"
when 'K'
puts "Result is #{nr1*nr2}"
else
puts "I don't know what you mean."
end
现在需要注意的是,
selection==“y”。upcase
将selection
与“y”
进行比较,它不会对您的选择进行upcase。我已经将这里的do调整为选择中的不区分大小写匹配,将其用作大小写
操作的对象。一个好习惯是将其分解为一个适当的大小写
语句:
case (selection.upcase)
when 'Y'
puts "Result is #{nr1+nr2}"
when 'V'
puts "Result is #{nr1-nr2}"
when 'K'
puts "Result is #{nr1*nr2}"
else
puts "I don't know what you mean."
end
现在需要注意的是,selection==“y”。upcase
将selection
与“y”
进行比较,它不会对您的选择进行upcase。我已经将这里的do调整为选择
上的不区分大小写匹配,将其用作大小写
操作的对象。一个选项是使用哈希
h = { 'Y'=>:+, 'V'=>:-, 'K'=>:* }
selection = gets.chomp.upcase
puts "Result is #{nr1.public_send(h[selection], nr2)}" if h.key?(selection)
一种选择是使用散列
h = { 'Y'=>:+, 'V'=>:-, 'K'=>:* }
selection = gets.chomp.upcase
puts "Result is #{nr1.public_send(h[selection], nr2)}" if h.key?(selection)
else(selection==“k”.upcase)
将被视为普通else
。可能您希望elsif
就位。我尝试过切换它,但没有任何效果,如果我输入“y”、“v”或“k”,它不会打印结果。您希望if selection.chomp.downcase==“y”
(或if selection.chomp.upcase==“y”
)gets.to_s
与gets
相同<代码>获取总是返回以换行符结尾的字符串(“\n”
)。您需要gets.chomp
删除该换行符。else(selection==“k”.upcase)
将被视为普通else
。可能您希望elsif
就位。我尝试过切换它,但没有任何效果,如果我输入“y”、“v”或“k”,它不会打印结果。您希望if selection.chomp.downcase==“y”
(或if selection.chomp.upcase==“y”
)gets.to_s
与gets
相同<代码>获取总是返回以换行符结尾的字符串(“\n”
)。您需要gets.chomp
删除该换行符。“y”.upcase
可以简化吗?这真的是你想要的吗?任何原因中的to_s
都会得到.to_s.chomp
?@CarySwoveland是的,不需要to_s
。更新了答案。如果selection.upcase==“Y”
就是这里想要的,我很确定可以简化“Y”。upcase
吗?这真的是你想要的吗?任何原因中的to_s
都会得到.to_s.chomp
?@CarySwoveland是的,不需要to_s
。更新了答案。我很确定if selection.upcase==“Y”
就是这里的目的。谢谢,我的问题是我输入了“Y”,if语句等待大写的“Y”,这就是它没有执行的原因。是的,你差点就完成了,但事情有点混乱。希望这有助于澄清。@CarySwoveland将字符串映射到操作并使用send
的查找表绝对是更好的解决方案。另一种选择是使用哈希<代码>h={'Y'=>:+,'V'=>:-,'K'=>:*};selection=gets.chomp.upcase;将“Result is#{nr1.send(h[selection],nr2)}”放在if h.key?(selection)
@CarySwoveland您可能应该添加它作为一个替代答案,只是出于教育目的。谢谢,我的问题是我输入了“y”,而if语句正在等待大写的“y”,这就是它没有执行的原因。是的,您差点就得到了它,但事情有点混乱。希望这有助于澄清。@CarySwoveland将字符串映射到操作并使用send
的查找表绝对是更好的解决方案。另一种选择是使用哈希<代码>h={'Y'=>:+,'V'=>:-,'K'=>:*};selection=gets.chomp.upcase;如果h.key?(selection)@caryswovel,则将“Result is#{nr1.send(h[selection],nr2)}”置于“如果h.key?(selection)@caryswovel,您可能应该将其添加为一个替代答案,仅用于教育目的。