描述
一个不含0的数,如果它能被它的每一位除尽,则它是一个自除数。例如128是一个自除数,因为128能被1、2、8整除。编写函数selfDivisor(num)判断num是否为自除数,使用该函数输出不大于N的所有自除数。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬
(注意,含有数字0的数不是自除数)‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入格式:

输入为一行,一个正整数N(N>=1)。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输出格式:

输出为一行,是不大于N的所有自除数,每个数后面有一个空格。

如果它能被它的每一位除尽,则它是一个自除数。

  1. for c in str(num): # 对数字num中的每位数字进行遍历
  2. if num % int(c) != 0: # 测试num的每一位是否是num的因子
  3. return False # 如果存在不能整除的数,则不是自除数
  4. else # 如果for遍历顺利结束,未遇到return,则执行else子句,返回True
  5. return True

注意:
1. else 做为 for 的子句,是在 for 循环未遇到 return 正常结束时才会被执行。也就是说,num 对其每一位上的数字取模的结果都不为零,也就是 num 不能被其每一位上的数字整除时才会执行 else 子句。num 如果能被其任一位上的数字整除,那么都会在循环中执行到return False,返回他不是自除数,此时不会再执行到else子句下面的return True。
2. 如果这个数字包含 0,不是自除数

  1. if '0' in str(num):
  2. return False # 包含数字0的不是自除数

合并两种情况就可以得到完整函数的定义:

  1. def selfDivisor(num):
  2. if '0' in str(num):
  3. return False # 包含数字0的不是自除数
  4. for c in str(num): # 对数字num中的每位数字进行遍历
  5. if num % int(c) != 0: # 测试num的每一位是否是num的因子
  6. return False # 如果存在不能整除的数,则不是自除数
  7. else: # 如果for遍历顺利结束,未遇到return,则执行else子句,返回True
  8. return True # 注意else是for的子句,后前一个if无关

输入一个整数 N,输出不大于N的所有自除数,每个数后面有一个空格。

  1. n=int(input())
  2. for num in range(1,n+1): # 注意不大于包括等于n
  3. if selfDivisor(num): # 调用函数,当返回值为True时,该数为自除数,输出这个数
  4. print(num,end=' ') # 输出以空格结尾

完整参考代码如下:

  1. def selfDivisor(num):
  2. if '0' in str(num):
  3. return False # 包含数字0的不是自除数
  4. for c in str(num): # 对数字num中的每位数字进行遍历
  5. if num % int(c) != 0: # 测试num的每一位是否是num的因子
  6. return False # 如果存在不能整除的数,则不是自除数
  7. else: # 如果for遍历顺利结束,未遇到return,则执行else子句,返回True
  8. return True
  9. n=int(input())
  10. for num in range(1,n+1): # 注意不大于包括等于n
  11. if selfDivisor(num): # 调用函数,当返回值为True时,该数为自除数,输出这个数
  12. print(num,end=' ') # 输出以空格结尾