我是ruby的新手,我试图制作一个简单的计算器,用户输入一个简单的问题(如加法或减法),然后返回答案。问题是当用户输入问题时,问题本身将被返回而不是该问题的答案。
puts "How many Questions?"
questions = gets.chomp.to_i
questions.times do |problem|
puts "question: "
problem = gets.chomp
puts "answer: #{problem}"
end
答案 0 :(得分:0)
在你的循环中,而不是:
problem = gets.chomp
puts "answer: #{problem}"
试试这个:
problem = gets.chomp
solved_problem = eval(problem)
puts "answer : #{solved_problem}"
eval
将把你的字符串解释为Ruby指令。但它非常混乱,因为任何人都可以在你的输入中编写任何Ruby程序,eval
会使它运行,所以它根本不安全。
如果您只想处理简单操作,可以先使用regex检查输入字符串是否符合您的要求:
problem_is_ok = (problem =~ /^\d+ *[+-] *\d+$/)
如果字符串以数字开头,后跟0到多个空格,后跟true
或+
符号,后跟0或更多空格,则为-
接下来是另一个数字,没有别的。如果不是这样,那么就会引发错误。
你的循环现在看起来像这样:
questions.times do |problem|
puts "question: "
problem = gets.chomp
problem_is_ok = (problem =~ /^\d+ *[+-] *\d+$/)
if problem_is_ok
puts "answer: #{eval(problem)}"
else
#I raise an error, but you might aswell just print it instead for your simple program
raise ArgumentError("Can't compute this")
end
end
答案 1 :(得分:0)
加减法可以是简单的ruby定义
我们传入5和1
代码的下半部分是明确的用户界面实现
当我们循环时,我们做了3次
它输出3个选项供用户选择
我们用chomp,standard in,键盘读入,选择1,2或3
如果elsif语句有条件地为每个案例选择
使用字符串插值我们将变量a和b渲染成一个新字符串, 并运行各自的方法(加或减)
将该方法的整数输出转换为字符串,并将其连接起来。
将其输出到用户屏幕
第3个选项不进行计算,
而是打印到用户屏幕上的一个简单的字符串当人们不输入1,2或3中的一个选择时,我们的其他条件就会出现这种情况
它告诉您更正您提供的选项
希望这有帮助
#!/usr/bin/env ruby
questions = 3
a, b = 5, 1
def add(a,b)
a + b
end
def subtract(a,b)
a - b
end
questions.times do |questions|
puts "Please choose:
1. add
2. subtract
3. exit"
questions = gets.chomp
if questions == '1'
puts "#{a} + #{b} = " + add(a,b).to_s
elsif questions == '2'
puts "#{a} - #{b} = " + subtract(a,b).to_s
elsif questions == '3'
puts 'exiting, goodbye.'
exit
else
p 'please choose again'
end
end