我刚开始学习 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)])
第三个问题是您的代码无法在逻辑上协同工作。但这会随着时间的推移而到来,伴随着真正的幸福。
