2017-02-22 8 views
-2

Hallo, ich habe eine Hausaufgabe, die soll ich in Python 3.x tunFactorial mit zwei Funktionen Python 3.x

ich, um herauszufinden, habe Schwierigkeiten, wie dies zu tun, so hoffe ich, Sie können erkläre mir, wie es dazu geht.

Problem

Die faktorielle einer positiven ganzen Zahl n (n geschrieben!) Ist das Produkt 1 x 2 x 3 x ... x n. Schreiben Sie ein Programm, das den Benutzer auffordert, eine positive Ganzzahl einzugeben, und berechnet dann die Fakultät der Zahl. Das Programm sollte zwei Funktionen enthalten: getN, an die die Eingabe gesendet wird und die garantiert, dass die Eingabe eine positive ganze Zahl ist. Die Funktion fact sollte den faktoriellen Wert berechnen. Das Programm (main) sollte dann den faktoriellen Wert anzeigen.

Bisher habe ich eine grobe Skizze, wie ich diese über hinwollen

#This program will show the answer to a factorial after the user inputs a value. 
def getN(n): 
    try: 
     n = int(input("Please enter a non-negative integer: ")) 
    except n < 1: 
     print("You did not enter a value of 1 or greater.") 

def fact(n): 
    count = 1 
    while n > 0: 
     count *= n 
     n -= 1 
     if n == 0: 
      break 
def main(n): 
    n = int(input("Please enter a non-negative integer: ")) 
    getN(n) 

main(n) 

ich seine glauben soll, so etwas sehen. Wenn Sie mir ein Feedback darüber geben können, was ich tun soll, was ich sehr schätze. Vielen Dank!

+0

'0' ist ein akzeptabler Eingang - es nicht negativ ist und es ist factorial '1'. – mhawke

+3

SO ist für die Suche nach Antworten auf bestimmte Probleme. Für diese Art von Anfrage ist [Code-Review] besser geeignet. – Julien

+0

"Ich bin nicht fertig mit meinen Hausaufgaben" ist keine Frage. – TigerhawkT3

Antwort

1

Bitte sehen Inline-Kommentare

def getN(): 
    try: 
     n = int(input("Please enter a non-negative integer: ")) 
     if n < 1: 
      raise ValueError # it will be thrown also if input is not a valid int 
    except ValueError: # n < 1 is not an Exception type 
     print("You did not enter a value of 1 or greater.") 
    else: 
     return n 

def fact(n): 
    count = 1 
    for i in range(1, n+1): # you see how simple it is with for loop? 
     count *= i 
    return count 

def main(): 
    n = getN() # before you were just asking n twice, never using fact() 
    print(fact(n)) 

main() 
+0

gibt es keine "Rückkehr" in der Tat Funktion. – rsm

+0

@rsm du hast recht, ich habe es verpasst. Fixed – Marat

+0

auch - Sie müssen nicht nehmen 'n' Parameter in' main' und übergeben Sie es an 'getN' – rsm

0

Scheint mir vernünftig. Es sieht so aus, als ob Sie die tatsächliche faktorielle Berechnung nie zurückgeben oder drucken. Vielleicht sollte deine Funktion "Tatsache" "zurück zählen"? Außerdem müssen Sie in Ihrer Fakt-Funktion nicht "if n == 0" überprüfen, denn wenn es 0 ist, wird die while-Schleife aufgrund der Bedingung der while-Schleife beendet.