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 № 1Wie 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.