2016-08-07 53 views
0

Python Anfänger drucken, zu versuchen:Python: neue Funktion definiert, aber es ist nicht das Ergebnis

  • Einsatz zwei Zahlen von der Tastatur
  • eine Summenfunktion der
  • drucken, die Summenfunktion zwei erstellen.

Mein Code sieht wie folgt aus:

number1 = raw_input("Insert number1 = ") 
print number1 

number2 = raw_input("Insert number2 = ") 
print number2 

def sumfunction (number1, number2): 
    print "Were summing number1 and number2 %d + %d" % (number1, number2) 
    return number1 + number2 
    print() 

ich so etwas wie Druck sumfunction möchte, oder etwas, das das Ergebnis der Funktion gedruckt wird. Derzeit mein Code nur gibt die number1 und number2 ...

bearbeiten: bearbeiten in Syntax

Antwort

1

Ändern Sie Ihren Code ein main Funktion zu verwenden. Es wird Ihnen helfen, den Codefluss besser zu verstehen:

def sumfunction(n1, n2): 
    print "Were summing %d + %d" % (n1, n2) 
    return n1 + n2 

def input_int(prompt): 
    while True: 
     try: 
      return int(raw_input(prompt)) 
     except ValueError: 
      print "Invalid input! Please try again." 

def main(): 
    number1 = input_int("Insert number1 = ") 
    print number1 

    number2 = input_int("Insert number2 = ") 
    print number2 

    result = sumfunction(number1, number2) 
    print "Result: %d" % result 

if __name__ == '__main__': 
    main() 

Dies ist die Standardmethode zum Schreiben von Python-Skripts. Sehen Sie, wenn das Skript läuft, führt es tatsächlich alles auf dem Weg aus. Also setzen wir die __name__ Prüfung am Ende, um zu sagen, "okay, das Skript ist geladen, jetzt starten Sie es tatsächlich an diesem vordefinierten Punkt (main)".

Ich habe Ihre Variablennamen geändert, so dass Sie verstehen, dass sie Bereich zu der Funktion sind, in der sie deklariert sind.

Ich zeige auch, wie main erhält den Rückgabewert von sumfunction, und speichert es auf eine Variable (genau wie Sie mit raw_input getan haben). Dann drucke ich diese Variable.

Schließlich habe ich eine Funktion namens input_int geschrieben. Als DeepSpace's answer indicated gibt raw_input eine Zeichenfolge zurück, aber Sie möchten mit Ganzzahlen arbeiten. Tun Sie dies, müssen Sie int für die Zeichenfolge aufrufen, die von raw_input zurückgegeben wird. Das Problem dabei ist, dass es eine ValueError Ausnahme auslösen kann, wenn der Benutzer eine ungültige Ganzzahl wie "snake" eingibt. Deshalb erhalte ich den Fehler und bitte den Benutzer, es erneut zu versuchen.

1
  1. Alles, was nach return Aussagen wird nicht ausgeführt werden.

  2. Sie haben die Funktion definiert. Alles was Sie jetzt tun müssen, ist es zu nennen ...

    sumfunction(number1, number2) 
    
  3. Ihre Funktion würde immer noch nicht funktioniert, wie Sie es erwarten. Da raw_input eine Zeichenfolge zurückgibt, gibt Ihre Funktion die verketteten Zahlen zurück (für die Zahlen 1 und 2 würde die Zeichenfolge '12' anstelle der Nummer 3 zurückgegeben). Sie sollten jede Nummer mit einem int (oder float) konvertieren:

    number1 = int(raw_input("Insert number1 = ")) 
    
1

die über diesen Schritt für Schritt gehen lassen.

können wir damit beginnen, indem Sie Ihre Funktion ändern:

def add(number1, number2): 
    print "We're summing number1 and number2 %d + %d = %d" % (number1, number2, number1 + number2) 

Beachten Sie, dass in dieser Version sind Sie eigentlich die Zahlen Hinzufügen und nicht vorzeitig beenden. Die Zahlen müssen von Strings in Integer konvertiert werden, bevor diese Funktion aufgerufen wird, und wir tun das in einem Moment. In Ihrer Version geben Sie nur ein Ergebnis zurück, können aber nicht drucken.

Darüber hinaus benötigen Sie eine Funktion aufzurufen, damit sie ihre Arbeit tun, also add(number1, number2)

Wenn wir Ihr Skript ein wenig Refactoring, können Sie das folgende erhalten:

def add(number1, number2): 
    "Only adds the two arguments together and returns the result" 
    return number1 + number2 

# convert inputs from strings to integers 
number1 = int(raw_input("Insert number1 = ")) 
print number1 

# convert inputs from strings to integers 
number2 = int(raw_input("Insert number2 = ")) 
print number2 

result = add(number1, number2) 
print "The result of %d + %d = %d" % (number1, number2, add(number1, number2)) 

Hinweis wie die Eingaben jetzt auch von Zeichenfolgen in tatsächliche ganze Zahlen umgewandelt werden, so dass sie hinzugefügt werden, anstatt verkettet zu werden. Das heißt, "2" + "2" = "22" während 2 + 2 = 4.

Es ist auch gut Praxis Ihren Code mit der folgenden Kontrolle zu wickeln:

if __name__ == '__main__': 
    # your main code here 

die oben kann also zu Refactoring:

def add(number1, number2): 
    "Only adds the two arguments together and returns the result" 
    return number1 + number2 

if __name__ == '__main__': 
    number1 = int(raw_input("Insert number1 = ")) 
    print number1 

    number2 = int(raw_input("Insert number2 = ")) 
    print number2 

    result = add(number1, number2) 
    print "The result of %d + %d = %d" % (number1, number2, add(number1, number2)) 

Dies ermöglicht es den Hauptteil des Codes ausgeführt werden nur wenn das Skript direkt aufgerufen wird, aber nicht, wenn es aus einem anderen Python-Skript als Modul import ed wird. Diese Überprüfung wird empfohlen, da in Python jede Datei als ein Modul betrachtet wird, d. H. Es ist zulässig, from <yourfile> import add zu sagen, und Sie möchten nicht, dass der Code, der Ihre add Implementierung tatsächlich testet, in diesem Fall ausgeführt wird.

Beachten Sie auch, dass wir die print Anweisungen von Ihrer add Funktion entfernt haben. Dies ist, um sicherzustellen, dass Ihre Funktion macht einen und nur eine Sache, d. H. add die Argumente. Dies macht Ihre Funktion allgemeiner und es ist einfacher, Ihren Code in anderen Teilen wiederzuverwenden, einschließlich solchen, in denen Anrufer nichts wirklich sofort wollen, während sie etwas berechnen.

Dies ist bekannt als Single-Responsibility-Principle. Wenn Sie diesem Grundsatz folgen, können Sie die Softwareentwicklung langfristig verbessern und verbessern.

Ich möchte etwas wie print sumfunction, oder etwas, das das Ergebnis der Funktion drucken wird.

Jetzt können Sie nur Folgendes tun:

x = 5 
y = 10 
print add(x, y)