/ / Das Rechnerprogramm in Ruby, das "2 + 3" nimmt und die Ausgabe 6 liefert, gibt mehr als zweistellige Zahlen aus - Ruby

Calculator Programm in Ruby, nehmen "2 + 3" und geben Ausgabe 6, Probleme mit mehr als 2 Ziffern - Ruby

Erster Beitrag, entschuldigen Sie, wenn ich gegen eine Etikette verstoße. Ich fange an, also könnte das einfach sein.

Der Versuch, in Ruby, einem Taschenrechner, zu codieren, bei dem der Benutzer einen arithmetischen Satz eingibt (nur binär, PEMDAS / BIDMAS wird später ausgeführt) und die Antwort kommt heraus.

Hier ist mein Code, der nur für einstellige Zahlen funktioniert.

class Calculator

def initializer (a,b)
@a = a,
@b = b
end

def add(a, b)
a+b
end

def subtract(a, b)
a-b
end

def multiply(a,b)
a*b
end

def divide (a,b)
a/b
end

def powers (a,b)
a**b
end

end

puts "Enter an expression to be evaluated"
a = gets.chomp.gsub(/s+/, "")

puts case a[1]

when "+"
"#{a[0]} + #{a[2]} = #{Calculator.new.add(a[0].to_f,a[2].to_f)}"
when "-"
"#{a[0]} - #{a[2]} = #{Calculator.new.subtract(a[0].to_f,a[2].to_f)}"
when "*" || "x" || "X"
"#{a[0]} x #{a[2]} = #{Calculator.new.multiply(a[0].to_f,a[2].to_f)}"
when "/"
"#{a[0]} / #{a[2]} = #{Calculator.new.divide(a[0].to_f,a[2].to_f)}"
when "^"
"#{a[0]} to the power #{a[2]} = #Calculator.new.powers(a[0].to_f,a[2].to_f)}"
else
"Not valid"
end

Ich dachte daran, eine Zeichenfolge wie "234 + 342" (234 und 342 können beliebig lange Zahlen sein) in ein Array wie ["234", "+", "342"] aufzuteilen.

Aber ich bin nicht sicher, wie das geht ??? Oder gibt es einen anderen Weg?

Hilfe wird geschätzt, nur eine persönliche Herausforderung.

Vielen Dank

Antworten:

1 für die Antwort № 1

Wie Sie bereits festgestellt haben, liegt das Problem in der Art und Weise, wie Sie Operationen über die Eingabezeichenfolge ausführen.

Der einfachste Weg, um fortzufahren, besteht darin, die Benutzer nach zwei Nummern zu fragen und sie dann aufzufordern, die erforderliche Operation einzugeben. So etwas wie:

puts "Enter first number"
a = gets.chomp
puts "Enter second number"
b = gets.chomp
puts "Enter required operation [+, -, *, /]"
c = gets.chomp

Sie können dies auch auf einmal tun, wie Sie es bereits versucht haben, ich würde jedoch davon abraten, da Sie nie wissen, welcher Benutzer eintrifft. Z.B:

puts "Enter an expression to be evaluated"
a = gets.chomp # user enters: 123 + 457
# => "123 + 457"

Nun extrahiere ich die Zahl:

numbers = a.scan(/d+/)
#=> ["123", "457"]
operator = a[/W+/]
#=> " + "

Sie können dann mit Ihrem Schaltergehäuse fortfahren.