我是剛入門Python沒多久的菜鳥,現在遇到一個問題關於打印階乘。
需要用到兩個函數 : getFacNumList(n) , dispFacNumList(n)
要求getFacNumList(n)這邊印出1-8, dispFacNumList(n)這邊印出1-8的階乘結果。
我試過這樣:
def dispFacNumList(n):
for j in range(1, n + 1):
n = n * j
return n
def getFacNumList(n):
for i in range(1, n + 1):
print('n = {} : n! = {}\t'.format(i,dispFacNumList(n)))
def main():
n = 8
dispFacNumList(getFacNumList(n))
main()
但是出來的結果是這樣:
n = 1 : n! = 8
n = 2 : n! = 8
n = 3 : n! = 8
n = 4 : n! = 8
n = 5 : n! = 8
n = 6 : n! = 8
n = 7 : n! = 8
n = 8 : n! = 8
說是dispFacNumList(n)出了問題,請問要怎麼解決?
Sisi, 你好
關於這段不是很清楚要求getFacNumList(n)這邊印出1-8
以下參考看看, 是否為你要的
def getFacNumList(n):
for j in range(1, n):
print('n = {} : n! = {}\t'.format(j,dispFacNumList(j)))
def dispFacNumList(n):
Sum = 1
for i in range(1, n+1):
Sum *= i
return Sum
if __name__ == '__main__':
n = 8
getFacNumList(n)
歡迎討論 - RoT
謝謝!已經差不多了!!但是題目要求最後main()那裡需要引用dispFacNumList(getFacNumList(n)),我不知道要怎麼處理 for i in range(1, n+1):
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int' 的問題。。。
Sisi, 你好
關於這段不是很清楚但是題目要求最後main()那裡需要引用dispFacNumList(getFacNumList(n))
這是說我這邊會出現這個錯誤嗎?我不知道要怎麼處理 for i in range(1, n+1): TypeError: unsupported operand type(s) for +: 'NoneType' and 'int' 的問題
歡迎討論 - RoT
你這段完全沒問題!!我的意思是指要是引用你這段代碼到我這的話,會有for i in range(1, n+1): TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'。 因為我需要在main()那裡同時引用 getFacNumList(n) , dispFacNumList(n)這兩個函數,即是 getFacNumList(dispFacNumList(n)) 的形式。
寫反了。。。是 dispFacNumList(getFacNumList(n)) 這樣。
Sisi, 你好
由 main() 去引發 def getFacNumList(n): 函式,
再引發 def dispFacNumList(n): 計算當下 n 值的階層解,
return 回 def dispFacNumList(n):
沒有你想的這麼複雜使用
dispFacNumList(getFacNumList(n))
歡迎討論 - RoT
有學到了!!謝謝,不知道為什麼總是想複雜了哈哈
#!/usr/bin/env python3
def getFacNumList(n):
s = []
s=[s[-1] for x in range(1,n+1) if not s.append(x*s[-1] if s else 1)]
return s
def dispFacNumList(lst):
for i, elem in enumerate(lst):
print('%d! = %d' % (i+1, elem))
if __name__ == '__main__':
n = 8
dispFacNumList(getFacNumList(n))
|=> ./ithelp201118.py
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
J4(解釋)一下拉:
s=[s[-1] for x in range(1,n+1) if not s.append(x*s[-1] if s else 1)]
s[-1] 就是 s list 的最後一筆.
改成這樣,你試試看, 是不是比較好理解.
def getFacNumList(n):
s = [1]
s=[s[-1] for x in range(1,n+1) if not s.append(x*s[-1])]
return s
def dispFacNumList(n):
return eval("*".join([str(i) for i in range(1, n+1)]))
def getFacNumList(n):
print("n={0}: n!={1}".format(n, dispFacNumList(n)))
for i in range(1, 9):
getFacNumList(i)
不用eval的話就得用math.prod或reduce了。要不然就是得用迴圈。
import math
def dispFacNumList(n):
return math.prod([i for i in range(1, n+1)])
def getFacNumList(n):
print("n={0}: n!={1}".format(n, dispFacNumList(n)))
for i in range(1, 9):
getFacNumList(i)
math.prod版