整段**基本上是面向過程的函式式程式設計思維。。。
第一段自定義函式is_perfnum是用來判斷是否為完美數的,引用 一下某度百科的完美數的定義:
完全數(perfect number),又稱完美數或完備數,是一些特殊的自然數。它所有的真因子(即除了自身以外的約數)的和(即因子函式),恰好等於它本身。如果乙個數恰好等於它的因子之和,則稱該數為「完全數」。第乙個完全數是6,第二個完全數是28,第三個完全數是496,後面的完全數還有8128、33550336等等。思路:
我們可以通過取余得零來找出乙個數的所有真因子,再將這些真因子求和看是否等於這個數。
這樣就可以判斷這個數是否是完美數了。
第二段自定義函式flag():
我想實現這樣乙個功能,即當計算出乙個完美數後,系統詢問你是否要繼續計算下乙個完美數。
因此自定義了flag函式用於判斷是否繼續生成。
思路:雙層while迴圈就可以搞掂了,最外層迴圈條件為鍵盤鍵入y/n。
內層迴圈條件為是否是完美數。
這樣當程式跳出內層迴圈時,就會判斷是否繼續外層迴圈,這時候就可以提醒你鍵入y/n啦
最後主函式部分:
變數 i 即為需要判斷是否完美的數,每次迴圈過後會進行自加。
需要注意的是,在外層迴圈的最後一句也需要進行一次 i 的自加。
因為當 i 為完美數時,內層迴圈中的 i = i + 1不會被執行,因此 i 的值始終是完美數的值。
這樣的話,當第一次求得完美數之後,i 始終不滿足內層迴圈的條件,就無法繼續生成接下來的完美數了。
所以,為了下一次運算做準備,在外層迴圈的最後一句也需要進行一次 i 的自加。
行文囉嗦。。。
直接上**好了。。。
# -*- coding: utf-8 -*-
'求完美數'
import os
def is_perfnum(x): #判斷x是否是完美數
l = # 建立列表儲存因子
for n in range(1,x): # 找出乙個數的所有因子
if x % n == 0:
if sum(l) == x: # 列表求和判斷完美數
print('%s is perfect number.'%x)
return true
else:
return false
def flag(): # 判斷是否繼續
print('continue? (y/n)')
yn = str.upper(str(input())) # 把輸入的字元先轉化為string,然後再全變為大寫
if yn =='y':
return true
elif yn =='n':
print('exiting program!')
os.system("pause")
return false
else:
print("error, wrong character!")
return false
if __name__=='__main__':
i = 1
while(flag()):
while(not is_perfnum(i)):
i = i + 1 # 不是完美數時,i + 1 測試下一位數
i = i + 1 # 是完美數時,跳出內迴圈並 i + 1,為下一次進入迴圈做準備
找完美數python
完美數又稱為完全數或完備數,它的所有的真因子 即除了自身以外的因子 的和 即因子函式 恰好等於它本身,例如6 1 2 3 28 1 2 4 7 14 def perfect lower,upper 找出lower upper之間的所有完美數 完美數是除自身外其他所有因子的和正好等於這個數本身的數 例...
求規定範圍內的完美數
輸入 檔名稱 sum123.cpp 作 者 林海雲 完成日期 2014年12月24日 版 本 號 v2.0 問題描述 求規定範圍內滿足條件的完美數。6的所有真約數是1 2 3,而且6 1 2 3。像這樣,乙個數所有真約數的和正好等於這個數,通常把這個數叫做完美數 程式輸入 m x n且輸入0 0結束...
python 求相鄰數
什麼是相鄰數?比如5,相鄰數為4和6,和5相差1的數,連續相差為1的一組數 需求 遍歷inputlist 所有數字,取出所有數字,判斷是否有相鄰數,不相鄰數字 和 相鄰數字 都以 陣列 形式 新增到 outputlist 中,並且 每個 陣列 裡 第一位 遞減 補全兩位數,末位 遞增 補全兩位數,每...