2017-02-06 9 views
0

Also muss ich einen Rechner, der Strings in Floats konvertiert dann berechnen. Das Problem ist, ich brauche, um Fehlermeldungen zu machen, wenn:Erstellen von Fehlermeldungen auf einem Taschenrechner in Python

  1. der Benutzer eine Zeichenfolge eingibt, der nicht enthält Operanden und/oder einen Operator.
  2. Der Benutzer gibt nichts ein (der Benutzer drückte einfach die Eingabetaste).
  3. der Benutzer gibt nur einen Operanden ein.
  4. gibt der Benutzer nur einen Operator ein.
  5. Der Benutzer gibt zwei Operanden ein.
  6. Der Benutzer gibt einen Operanden und einen Operator ein.
  7. der Benutzer versucht, eine Zahl durch 0 zu teilen.
  8. der Benutzer hat keinen Abstand zwischen den Operanden und dem Operator.

Dies ist, wie der Code wie Nachrichten ohne Fehler dieses

# Error for not having a space 
if (equation.find(" ") == False): 
    print ("Error #1: Please check if there is a space in between the two operands and the operator.") 

# Error for dividing by 0 
if (operand2 == "0"): 
    print ("Error #7: You cannot divide by 0.") 

jedoch Python diese So

# Interface 
print ("Equation Calculator") 
print (" ") 
print ("My Equation Calculator is able to") 
print ("  Add: +") 
print ("  Subtract: -") 
print ("  Multiply: *") 
print ("  Divide: /") 
print (" ") 
print ("The equation you enter must follow this syntax:") 
print (" <openrand><speace><operator><space><operand>.") 
print ("An <operand> is any float number.") 
print ("An <operator> is any is any of the operators mentioned above.") 
print ("A <space> is an empty space.") 

# Enter the equation 
equation = input ("Enter your equation: ") 

# Split the equation into Operand 1,2 and Operator 
operand1,operator,operand2 = equation.split(" ") 


# Show the user the equation 
print ("Here is the equation you have entered: " + equation) 

# Addition, Converting strings (operand 1 and 2) into float 
if (operator == "+"): 
    answer = float(operand1) + float(operand2) 

# Subtraction, Converting strings (operand 1 and 2) into float 
if (operator == "-"): 
    answer = float(operand1) - float(operand2) 

# Multiplication, Converting strings (operand 1 and 2) into float 
if (operator == "*"): 
    answer = float(operand1) * float(operand2) 

# DIvision, Converting strings (operand 1 and 2) into float 
if (operator == "/"): 
    answer = float(operand1)/float(operand2) 

# Display the answer 
print ("The answer is: ",answer) 

für 7 und 8. Fehler, die ich tat sieht einfach umgeht und immer noch abstürzt. Was ist das Problem mit dem obigen Code? Wie kann ich es so machen, dass der Code in den obigen 8 Situationen Fehlermeldungen ausgibt? Auch kann ich nicht die integrierten Funktionen eval() oder exec(), brechen oder weitermachen oder übergeben oder sys.exit(). Ich bin sehr neu in der Programmierung im Allgemeinen. Bitte helfen und danke.

+1

Verwenden Sie 'else' Anweisungen – Julien

+0

Sie können versuchen:' 'operand1, operator, operand2 = equation.split (" ")' 'außer ValueError:' um sicherzustellen, dass Sie 3 Strings in 'equation' erhalten.Sie können einen ähnlichen Vorgang ausführen, um 'ValueError' zu fangen, um sicherzustellen, dass die Operanden-Strings in Floats umgewandelt werden können:' try: '' operand1 = float (operand1) '' außer ValueError: '. Weitere Informationen finden Sie unter [Ausnahmen] (https://docs.python.org/3/tutorial/errors.html#exceptions) im Lernprogramm. –

Antwort

0

eine Struktur wie diese verwenden:

if bad_condition: 
    print "error" 
else: 
    # do whatever 
0

Sie können dies versuchen:

try: 
    assert condition, "Error Message" 
except AssertionError, e: 
    raise Exception(e.args) 

zum Beispiel:

# Error for not having a space 
try: 
    assert (equation.find(" ")), "Error #1: Please check if there is a space in between the two operands and the operator." 
except AssertionError, e: 
    raise Exception(e.args) 
1

Wenn Sie einige Set Anforderungen an die eingehenden Daten, Es ist normalerweise eine gute Idee, vorher zu prüfen, ob die Daten diesen Anforderungen entsprechen. So würde ich testen, ob die Zeichenfolge Ihre Anforderungen gegeben entsprechen: Die allgemeine Struktur mit regulären Ausdrücken getestet werden kann:

Ich gehe davon nur ganze Zahlen verwendet werden, wenn Sie nicht die \ ds mit schwimmender pointg Anpassung ersetzen müssen, die sollte googlefähig sein.

\d+ [+\/\-*] \d+ 

Diese Regex entspricht eine beliebige Ziffer, gefolgt von einem Leerzeichen, gefolgt von einem des Operator +/* - und einer Ziffer.

Bitte nicht das würde eine sehr allgemeine Fehlermeldung verursachen - wie "Ihre Eingabe sieht nicht wie die erforderliche Eingabe aus", so dass es besser sein könnte, die Teile separat zu testen, um eine bessere Benutzererfahrung zu geben.

Verwandte Themen