2013-10-01 4 views
0

Вечер,Создание факториала Python

Я интро для ученика python, испытывающего некоторые проблемы. Я пытаюсь сделать факториальную программу python. Он должен запрашивать у пользователя n, а затем вычислять факториал n, если пользователь не вводит -1. Я так застрял, и профессор предложил использовать цикл while. Я знаю, что еще не добрался до случая «if-1». Не знаю, как заставить python вычислять факториал, просто наглядно используя математическую функцию.

import math 

num = 1 
n = int(input("Enter n: ")) 

while n >= 1: 
    num *= n 

print(num) 
+1

Похоже, что вы почти у цели, я бы просто взял его за линию. – Nicole

+0

просто попробуйте некоторые утверждения печати внутри цикла while, чтобы увидеть, что происходит. –

ответ

4

«классический» факториал в школе является рекурсивным определением:

def fact(n): 
    rtr=1 if n<=1 else n*fact(n-1) 
    return rtr 

n = int(input("Enter n: ")) 
print fact(n) 

Если вы просто хотите способ исправить ваш:

num = 1 
n = int(input("Enter n: ")) 

while n > 1: 
    num *= n 
    n-=1  # need to reduce the value of 'n' or the loop will not exit 

print num 

Если вы хотите тест на цифры менее 1:

num = 1 
n = int(input("Enter n: ")) 

n=1 if n<1 else n # n will be 1 or more... 
while n >= 1: 
    num *= n 
    n-=1  # need to reduce the value of 'n' or the loop will not exit 

print num 

Или тест п после ввода:

num = 1 
while True: 
    n = int(input("Enter n: ")) 
    if n>0: break 

while n >= 1: 
    num *= n 
    n-=1  # need to reduce the value of 'n' or the loop will not exit 

print num 

Вот функциональный способ использования reduce:

>>> n=10 
>>> reduce(lambda x,y: x*y, range(1,n+1)) 
3628800 
+0

Мы пока не рассмотрели определение наших собственных функций. Второй блок кода это-им действительно близко, но не совсем там. как снова ссылаться на мои переменные в заявлении на печать? и можно ли добавить оговорку о вводе -1 с оператором while или мне понадобится инструкция if/then? ' Num = 1 п = INT (вход ("Введите п: ")) , а п> 1: Num * = п п = 1 печать (" Факториал" п«является "num) n = int (input (" Enter n: ")) ' – tcam23

+0

извините, не знаю, как добавить перерывы в комментариях – tcam23

+0

Простите меня, но это довольно ужасный python, esp. часть n = 1, если n <1 else n'. – georg

1

Вы на самом деле очень близки. Просто обновите значение n с каждой итерацией:

num = 1 
n = int(input("Enter n: ")) 

while n >= 1: 
    num *= n 
    # Update n 
    n -= 1 
print(num) 
Смежные вопросы