Python練習題 快樂數字

2021-08-21 06:44:02 字數 1104 閱讀 8201

題目描述:

編寫乙個演算法來確定乙個數字是否「快樂」。 快樂的數字按照如下方式確定:從乙個正整數開始,用其每位數的平方之和取代該數,並重複這個過程,直到最後數字要麼收斂等於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...