Ich versuche, einen Rechner zu erstellen, der Benutzereingaben nimmt. Ich möchte, dass diese Eingabe nicht nur die Zahlen, sondern auch den Operator enthält (+
, -
, *
, /
). Ich habe eine Methode erstellt, die mit einem bestimmten Parameter arbeitet. Hier ist mein Code:Rechner, der einen Operator als Benutzereingabe verwendet
def calculator(x, y, z)
if y == '+'
ans = x + z
elsif y == '-'
ans = x - z
elsif y == '*'
ans = x * z
elsif y == '/'
ans = x/z
end
p ans
end
calculator(3, '+', 5)
calculator(4, '-', 2)
calculator(3, '*', 10)
calculator(21, '/', 7)
puts "Please enter your calculation"
user_calc = gets.chomp
user_calc.chars
user_calc[0].to_i
user_calc[4].to_i
calculator(user_calc[0], user_calc[2], user_calc[4])
Das Programm nimmt Index 0
die erste ganze Zahl zu sein, Index 2
der Betreiber und der Index 4
die zweite ganze Zahl ist.
Wenn ich 3 + 5
eingib, ist der Ausgang 35
anstelle von 8
. Jede andere Operation (-
, *
, /
) gibt nil
zurück. Wenn ich versuche, Benutzereingaben zu verwenden, erhalte ich einen Fehler. Ich denke, es behandelt alles im Array als String. Die angegebenen Parameter funktionieren wie vorgesehen. Aber ich kann die Benutzereingaben nicht ganz festhalten.
Ich frage mich, wie ich das beheben würde.
Danke, Amadan. Ich verstehe, warum ich jetzt nicht die richtigen Ergebnisse erhielt. Ich habe ein bisschen mehr nachgedacht, und ich hatte eine zusätzliche Frage, die ich versucht habe zu lösen. Gibt es eine Möglichkeit, jede Eingabe (x, y, z) als eigenen Index zu behandeln? Im Augenblick, auch wenn ich user_calc.split ('') , jedes Zeichen wird behandelt, wie es eigenen Index ist. So würde zum Beispiel 5 + 95 stattdessen 5 + 9 zurückgeben. Ich frage mich, wie ich user_calc anders aufteilen könnte. Mit anderen Worten, wie würde ich eine Rückkehr von 100 für 5 + 95 statt einer Rückkehr von 14 erhalten. – Orie
Wie Keith sagte, regelmäßige Ausdrücke. '_, arg1, op, arg2 = *" 5 + 95 ".match (/ (\ d +) \ s * ([- + * \ /]) \ s * (\ d +) /)' extrahiert zwei ganzzahlige Argumente (als Strings müssen Sie immer noch 'to_i') und ein Operator zwischen ihnen. – Amadan