ActiveState Code

Recipe 576616: Factorial-Lambda


If n is a positive integer,factorial(n!) is the product of all the positive integers from 1 up to the given integer. However, different types of functions are applied,including the anonymous lambda to generate the factorial number, because it is simple and returns a value ( a new function ), which can be assigned a name.

Python
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#On the name of ALLAH
#Author : Fouad Teniou
#Date : 13/01/09
#version :2.4

import random

class NegativeNumberError(ArithmeticError):
    """ attempted imporper operation on negative number"""
    
    pass

class ZeroNumberException(ArithmeticError):
    """ attempted operation on zero with an agreed solution"""
    
    pass

def errors(number):
    """ Raises NegativeNumberError if number less than 0, and
    raises ZeroNumberException if number is equal to 0."""
    
    if number < 0:
        raise NegativeNumberError,\
            "\n<The number must be greater or equal to 0 \n"
    elif number == 0:
        raise ZeroNumberException,\
            "\n<It is agreed per convention that 0!= 1 \n"
    elif number >0:
        pass 
    
    return number

while 1:
    #get users answer to use Factorial program or exit the while loop 
    Answer = raw_input("\n<Would you like to use Factorial program, yes or no?:\t")

    if Answer == "yes":
      
        print '\n\t\t\t','','\5'*49
        print '\t\t\t\t  Welcome to Factorial n! Program'
        print '\t\t\t','','\5'*49,'\n'
    
        try:
            #get users entered numbers and compute factorial 
            userValue = float(raw_input('<Please enter a number :\t'))
            errors(userValue)

            Y=random.randrange(int(userValue)+1)

            mult = lambda d:reduce(lambda x,y:x*y,range(1,int(Y)+1))

            print '\n<A random list of factorial between 0 and %s will be displayed' % int(userValue)
            print '\n\t\t',str(0)+'!=',int(1),'\n'
            for Y in range(1,int(Y)+1):
                print '\n\t\t',str(Y)+'!=',mult(int(Y)),'\n'
                
        #Factorial raise ValueError if input is not numerical
        except ValueError:
            print "\n<The entered value is not a number"
        
        #Factorial raises Negative number exception
        except NegativeNumberError,exception:
            print exception
        
        #Factorial raises zero number exception
        except ZeroNumberException,exception:
            print exception 
      
    elif Answer == "no":
        break

#############################################################################
#c:\hp\bin\Python>python "C:\Documents\Programs\classes\Factorial7
#
#<Would you like to use Factorial program, yes or no?:   yes
#
#                         ?????????????????????????????????????????????????
#                                  Welcome to Factorial n! Program
#                         ?????????????????????????????????????????????????
#
#<Please enter a number :        7
#
#<A random list of factorial between 0 and 7 will be displayed
#
#                0!= 1
#
#
#                1!= 1
#
#
#                2!= 2
#
#
#<Would you like to use Factorial program, yes or no?:   yes
#
#                         ?????????????????????????????????????????????????
#                                  Welcome to Factorial n! Program
#                         ?????????????????????????????????????????????????
#
#<Please enter a number :        -7
#
#"\n<The number must be greater or equal to 0 \n"
#
#
#<Would you like to use Factorial program, yes or no?:   yes
#
#                         ?????????????????????????????????????????????????
#                                  Welcome to Factorial n! Program
#                         ?????????????????????????????????????????????????
#
#<Please enter a number :        0
#
#<It is agreed per convention that 0!= 1
#
#
#<Would you like to use Factorial program, yes or no?:   yes
#
#                         ?????????????????????????????????????????????????
#                                  Welcome to Factorial n! Program
#                         ?????????????????????????????????????????????????
#
#<Please enter a number :        test
#
#<The entered value is not a number
#
#<Would you like to use Factorial program, yes or no?:   yes
#
#                         ?????????????????????????????????????????????????
#                                  Welcome to Factorial n! Program
#                         ?????????????????????????????????????????????????
#
#<Please enter a number :        7
#
#<A random list of factorial between 0 and 7 will be displayed
#
#                0!= 1
#
#
#                1!= 1
#
#
#                2!= 2
#
#
#                3!= 6
#
#
#               4!= 24
#
#
#                5!= 120
#
#
#<Would you like to use Factorial program, yes or no?:   no
#
#c:\hp\bin\Python>
########################### Factorial ref FT (2 D A Missr)
#

Discussion

I tried 27!,77!,107!, and the results were up to 11!,47!, and 44!. However, one of my hobbies is painting, and I think the way the factorials numbers are displayed if you run my program on DOS is artistic, thus, I am willing to draw a canvas painting, to match my results, good luck everyone for the match.

Sign in to comment