Python挑战练习-进阶挑战36
编写一个程序来判断一个数字是否为Harshad数。
如果一个数字可以被它的数字之和整除,那么它就是一个Harshad数,如171:
number = 171
1 + 7 + 1 = 9 [数字之和]
9 正好整除 171
-
定义函数
is_harshad()
,参数为num
(整数)。 -
在函数内,判断该数字是否为Harshad数,如果是,返回
True
,否则返回False
。分析:要把每个数字提取出来,还要求他们的和,于是想到可以利用逐步取余数的办法,把每一位数字取出来,再相加,进一步把得到的和再与原数运算,看是否能整除。
def is_harshad(num):
digit_sum = 0
n = num
while n > 0:
digit = n % 10
digit_sum += digit
n //= 10
return num % digit_sum == 0
解释:
-
初始化变量:
digit_sum
初始化为 0,用于累加数字各位数字之和。n
初始化为num
,后续会在循环中不断更新它的值来依次获取每一位数字,而保留原始的num
用于最后的整除判断。 -
循环提取数位数字并求和:
通过while n > 0:
循环来判断是否还有未处理的数位,只要n
大于 0,就说明数字还有数位没处理完。在循环中:-
digit = n % 10
:这一步获取n
的个位数字,例如n
为 171 时,n % 10
得到 1,也就是个位数字。 -
digit_sum += digit
:将获取到的个位数字累加到digit_sum
变量中,用于计算各位数字之和。 -
n //= 10
:这一步将n
进行整除 10 的操作,相当于去掉了已经处理过的个位数字,例如n
为 171 时,执行完这一步后n
变为 17,这样就可以在下一次循环中继续处理十位数字了。
-
-
判断是否为 Harshad 数并返回结果:
当循环结束后,digit_sum
中存储的就是原数字各位数字之和,通过return num % digit_sum == 0
判断原数字num
是否能被digit_sum
整除,如果能整除,这个表达式的值为True
,函数返回True
;如果不能整除,表达式的值为False
,函数返回False。
几个需要注意的地方(写给自己)
①代码中出现了digit_sum,也就是求和部分,所以首先一定要给他进行初始化。
②n//=10,比如171,取出个位数字1之后,下一步是对17再取余,取出7,这里也存在一个循环的过程,所以写成//=,而并不是只有一次的num//10,num是不变的,变化的是n的值!
③被谁整除,翻译过来就是除以谁,所以用num除以digit_num,返回布尔值