題目描述:
編寫乙個演算法來確定乙個數字是否「快樂」。 快樂的數字按照如下方式確定:從乙個正整數開始,用其每位數的平方之和取代該數,並重複這個過程,直到最後數字要麼收斂等於1且一直等於1,要麼將無休止地迴圈下去且最終不會收斂等於1。能夠最終收斂等於1的數就是快樂的數字。
例如:19是乙個快樂數字,計算過程如下:
要求:當輸入快樂的數字時,輸出true,否則輸出false。
思路:
1. 當輸入的不是快樂數字時,會陷入乙個無限迴圈,因此增加乙個計數器 count 用來統計計算次數。設定當 count 達到2000次時,認為該數字不是快樂數字,跳出迴圈結束計算。(這裡我認為直接設定乙個最大迴圈次數不怎麼科學,但是暫時沒有想到更有說服力的方法來決定何時結束迴圈。)
2. 因為不確定輸入的數字會是幾位數,因此不採用除法和取模的方法來獲得數字的每一位數,而是利用 for 迴圈獲取字串型別數字的每一位來計算平方和。
**:
#快樂的數字
def getsumofsquares(num):
numstr=str(num) #將待計算的數字轉換成字串型別
sum=0
digitls=[int(x) for x in numstr] #從字串中提取出每一位數字存入乙個列表
#print(digitls)
for i in digitls:
sum += i**2
return sum
def main():
n = input() #輸入乙個正整數
sumofsqrs = eval(n)
count = 0
while sumofsqrs != 1:
sumofsqrs = getsumofsquares(sumofsqrs)
count += 1
if count > 2000: #當計算次數超過2000次時,跳出迴圈結束計算
print("false")
break
else:
print("true")
main()
python書中練習題 python練習題
1 定義乙個空列表,接收從鍵盤輸入的整數,把列表傳給乙個從大到小排序的函式,再輸出排序後的列表的值 listex b 0 a int input 請輸入列表長度 while b a num int input 請輸入字元 b 1 print listex sum 0 for i in range 0...
python的練習題 Python練習題
1 使用while迴圈輸入1 2 3 4 5 6 8 9 10 i 0while i 10 i i 1 if i 7 continue print i 結果 e python python python test.py1 2 求1 100的所有數的和 i 0sum 0 while i 100 i 1...
python 練習題之 數字排序
今天linux技術圈的逗哥出了道題,題目很簡單 要求 2 9 5 7 6 1 4 8 3 5 4 2 求每行的最大值 最近剛好在學習python,感覺py也可以做出來。usr bin env python condig utf 8 alist 2,9,5,7 print sorted alist,r...