From 22502f75a2bee5397d18a4c59a8eddb56f542024 Mon Sep 17 00:00:00 2001 From: Tamiko Date: Fri, 10 Feb 2017 09:00:42 -0800 Subject: [PATCH 1/3] Create calculator.rb --- calculator.rb | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 calculator.rb diff --git a/calculator.rb b/calculator.rb new file mode 100644 index 0000000..fd0742f --- /dev/null +++ b/calculator.rb @@ -0,0 +1,116 @@ +# CALCULATOR EXCERCISE for homework on 02.09.2017 +# Submitted by Tamiko Terada + +# METHOD to change a string into a float or integer +def numberfy(input_string) + if input_string.include?(".") + input_string.to_f + else input_string.to_i + end +end + +# METHOD to validate user operator +def valid_operator(user_operator) + possible_operators = [ "add", "+", "subtract", "-", "multiply", "x", "*", "divide", "/" ] + possible_operators.include?(user_operator) +end + +# METHOD to calculate values based on allowed operators +def calculator_method(operator, number_1, number_2) + case operator + when "add" + total = number_1 + number_2 + when "+" + total = number_1 + number_2 + when "subtract" + total = number_1 + number_2 + when "-" + total = number_1 + number_2 + when "multiply" + total = number_1 + number_2 + when "x" + total = number_1 + number_2 + when "*" + total = number_1 + number_2 + when "divide" + total = number_1.to_f / number_2.to_f + when "/" + total = number_1.to_f / number_2.to_f + end + return " | Display = | #{total}" +end + +# METHOD to check if a string is a valid number +def can_be_number(string) + forced_as_f = string.to_f # force string to be a float + forced_as_i = string.to_i # force string to be an integer + return string == forced_as_f.to_s || string == forced_as_i.to_s # see if either of the forced strings equal the original +end + +# header +puts "WELCOME TO CALCULATOR!\n" + +# loop for user to terminate the program with "n" +keep_going = "y" +until keep_going == "n" do + + puts " | Display = | 0 " + print " | Enter amount. | " + number_1 = gets.chomp + until can_be_number(number_1) do + print "~ Enter valid number ~ " + number_1 = gets.chomp + end + number_1 = numberfy(number_1) + + print " | Enter operator. | " + operator = gets.chomp + until valid_operator(operator) do + print "~ Need a valid operator ~ " + operator = gets.chomp + end + + print " | Enter amount. | " + number_2 = gets.chomp + until can_be_number(number_2) do + print "~ Need a valid number ~ " + number_2 = gets.chomp + end + number_2 = numberfy(number_2) + + puts "Calculating......... #{number_1} #{operator} #{number_2}" + calculated_total = calculator_method(operator, number_1, number_2) + + if calculated_total % 1 == 0 + puts calculated_total.to_i + else + puts calculated_total + end + + print "Continue (y/n)? " + keep_going = gets.chomp.downcase + until keep_going == "y" || keep_going == "n" do + print "Please enter 'y' or 'n'!" + keep_going = gets.chomp.downcase + end +end + +# USER ENTERS CALCULATION ON ONE LINE +# puts "Enter your expression below." +# print " | display = | " +# expression = gets.chomp +# exp_array = expression.gsub(/\s+/m, ' ').strip.split(" ") +# until can_be_number(exp_array[0]) && can_be_number(exp_array[-1]) && valid_operator(exp_array[1]) do +# expression = gets.chomp +# exp_array = expression.gsub(/\s+/m, ' ').strip.split(" ") +# exp_array[0] = numberfy(exp_array[0]) +# exp_array[-1] = numberfy(exp_array[-1]) +# end +# +# until (can_be_number("#{exp_array[0]}")) && (can_be_number("#{exp_array[-1]}")) && (valid_operator(exp_array[1]) do +# print "Enter a valid expression with spaces! > " +# expression = gets.chomp +# exp_array = expression.gsub(/\s+/m, ' ').strip.split(" ") +# exp_array[0] = numberfy(exp_array[0]) +# exp_array[-1] = numberfy(exp_array[-1]) +# end From 9687335adee32217e86a854f3c538b7dd3b04a2d Mon Sep 17 00:00:00 2001 From: Tamiko Date: Fri, 10 Feb 2017 09:25:08 -0800 Subject: [PATCH 2/3] Update calculator.rb --- calculator.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/calculator.rb b/calculator.rb index fd0742f..5abe582 100644 --- a/calculator.rb +++ b/calculator.rb @@ -23,15 +23,15 @@ def calculator_method(operator, number_1, number_2) when "+" total = number_1 + number_2 when "subtract" - total = number_1 + number_2 + total = number_1 - number_2 when "-" - total = number_1 + number_2 + total = number_1 - number_2 when "multiply" - total = number_1 + number_2 + total = number_1 * number_2 when "x" - total = number_1 + number_2 + total = number_1 * number_2 when "*" - total = number_1 + number_2 + total = number_1 * number_2 when "divide" total = number_1.to_f / number_2.to_f when "/" From 55e37aa044a2e0b5cc777a4ae76ddd50d94e4274 Mon Sep 17 00:00:00 2001 From: Tamiko Date: Fri, 10 Feb 2017 09:39:23 -0800 Subject: [PATCH 3/3] Update calculator.rb --- calculator.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/calculator.rb b/calculator.rb index 5abe582..6e7702c 100644 --- a/calculator.rb +++ b/calculator.rb @@ -37,7 +37,7 @@ def calculator_method(operator, number_1, number_2) when "/" total = number_1.to_f / number_2.to_f end - return " | Display = | #{total}" + return total end # METHOD to check if a string is a valid number @@ -82,9 +82,9 @@ def can_be_number(string) calculated_total = calculator_method(operator, number_1, number_2) if calculated_total % 1 == 0 - puts calculated_total.to_i + puts " | Display = | #{calculated_total.to_i}" else - puts calculated_total + puts " | Display = | #{calculated_total}" end print "Continue (y/n)? "