Skip to main content
 首页 » 编程设计

Python:将函数的结果重新插入自身,直到它达到 1,或者如果它永远循环 break 和 print(sad)

2025年05月04日29birdshome

我刚开始学习 Python 几天,所以请原谅我的粗暴工作。

def sum_digits(n): 
    s = 0 
    while n: 
        s += n % 10 
        n //= 10 
    return s 
 
def IsHappy(x): 
    sum_digits(x**2)==1 
    while True: 
        print("happy number") 
        break 
    while False: 

基本上,我想要一个函数来测试一个数字是否是一个快乐的数字 https://en.wikipedia.org/wiki/Happy_number 如果第一次尝试的值为 1,我想出了如何让它说“快乐数字”。 但是,如果第一次尝试时该值不是 1,我希望它对数字进行平方,然后对数字求和。我希望它重复直到它得到 1。如果它永远循环,我希望它打印(“不快乐的数字”)。

谢谢。

请您参考如下方法:

您的第一个问题是您不知道幸福的含义——您是对平方的数字求和,而不是对数字的平方求和。第二个问题是你的不快乐是无限的——除非你对你的数字进行某种循环/循环检测,否则你的无限循环永远不会产生不快乐或任何结果。 Python 集非常适合此目的:

def sum_digits_squared(number): 
    sum_squares = 0 
 
    while number: 
        sum_squares += (number % 10) ** 2 
        number //= 10 
 
    return sum_squares 
 
def is_happy_number(number): 
    seen_set = set()  # loop detection 
 
    while True: 
        sum_squares = sum_digits_squared(number) 
 
        if sum_squares == 1:  # we reached 1 (happy) 
            return True 
        if sum_squares in seen_set:  # we have a loop (unhappy) 
            return False 
 
        seen_set.add(sum_squares) 
 
        number = sum_squares 
 
happiness = { True: "happy :-)", False: "not happy :-(" } 
 
for n in range(1, 101): 
    print(n, "is", happiness[is_happy_number(n)]) 

第三个问题是您的代码无法在逻辑上协同工作。但这会随着时间的推移而到来,伴随着真正的幸福。