如何解决红宝石串

时间:2016-07-20 15:41:39

标签: ruby

我是ruby的新手,我试图制作一个简单的计算器,用户输入一个简单的问题(如加法或减法),然后返回答案。问题是当用户输入问题时,问题本身将被返回而不是该问题的答案。

puts "How many Questions?"
questions = gets.chomp.to_i

questions.times do |problem|
    puts "question: "
    problem = gets.chomp
    puts "answer: #{problem}"
end

2 个答案:

答案 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
相关问题