a=1
for _ in range(int(input("Enter: "))):
a=a*(_+1); print(a)
This code does the factorial and prints the values as the process goes. An input of 5 would print: 1 2 6 24 120 It takes the past output value and multiplies the next number in input.
I want to get the same output or even better by only printing after the calculation is done. But the most important thing I want to achieve is a better optimized code that uses less lines. One more thing don't use libraries.
You could print only the final result, in a single line using max and a walrus assignment:
print( max(1,a:=1,*(a := a*i for i in range(2,int(input("Enter: "))+1))) )
This even works for 0! = 1
If you want to print all the values in one line, you can write it without the max():
print( a:=1, *(a := a*i for i in range(2,int(input("Enter: "))+1)) )