تحديات بايثون Happy Number

ما هو العدد السعيد؟

  • نبدأ بعدد معين n.
  • نحسب مجموع مربعات أرقامه.
  • نكرر العملية حتى نحصل على 1 (فيكون العدد سعيدًا :white_check_mark:) أو ندخل في دورة لا نهائية (فيكون العدد غير سعيد :x:).

مثال توضيحي

مثال 1: العدد 19 (عدد سعيد :white_check_mark:)
9 * * 2 + 1* *2 =1+81 = 82
2 ** 2 + 8 ** 2 = 68
8 ** 2 + 6 ** 2 = 100
0 ** 2 + 0 ** 2 + 1 ** 2 = 1.
وصلنا الى 1 اذن العدد 19 سعيد مثلما نحن سعداء للغاية :slight_smile:

مثال 2: العدد 20 (عدد غير سعيد :x:)

0 ** 2 + 2 ** 2 = 4
4 ** 2 = 16
6 ** 2 + 1 ** 2 = 13
7 ** 2 + 3 ** 2 = 58
8 ** 2 + 5 ** 2 = 89
9 ** 2 + 8 ** 2 = 145
5 ** 2 + 4 ** 2 + 1 ** 2 = 42
2 ** 2 + 4 ** 2 = 20.
عدنا الى العدد 20 مجددا اذن يبدو انها حلقة لا متناهية…وعليه العدد 20 عدد ليس سعيد تماما مثل أعدائنا :frowning: :expressionless:
ملاحظة قد توجد اخطاء في الكتابة او الحسابات…انا تعبت ولم اعد ادري ما اكتبه المهم ان الفكرة وصلتكم :slight_smile:

3 إعجابات
#challenge: Happy number
def is_happy(number=19):
    current_number = number
    seen_num = []

    while True:
        result = 0
        for i in str(current_number): result += int(i)**2

        if result == 1:
            print(f"The number {number} is a very happy number:)")
            break

        if result in seen_num or result == number:
            print(f"The number {number} isn't a happy number:(")
            break

        seen_num.append(result)
        current_number = result
    print(seen_num)
        
is_happy(23)
إعجابَين (2)

الحل :

def is_happy (number) :
  nums, list, n = ' '.join (number).split (" "), [], print ("Attempts :")
  while True :
    num= ""
    for x in nums : num += (str(int(x)**2)+" ")
    num = str (eval ("+".join (num.split (" "))+ "0"))
    nums, n = num, print (num)
    if num == "1" : return True 
    elif num == f"{number}" or num in list : return False 
    list.append (num)

print ("is happy :",is_happy (input("Enter a number :")))
إعجاب واحد (1)