""" 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数", 因为153=1的三次方+5的三次方+3的三次方。 程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 """ def answer1(): """ 正常for循环比较 :return: """ print("输出一", end=":") for i in range(100, 1000): a = i // 100 b = i % 100 // 10 c = i % 10 if i == a ** 3 + b ** 3 + c ** 3: print(i, end=",") answer1() def answer2(): """ 逆向思维,有三个一位数组合成一个三位数 :return: """ print("\n输出二", end=":") for i in range(1, 10): for j in range(0, 10): for k in range(0, 10): if i ** 3 + j ** 3 + k ** 3 == i * 100 + j * 10 + k: print(i * 100 + j * 10 + k, end=",") answer2() def answer3(): """ 通过类型转换来获取三位数的各位数值 :return: """ print("\n输出三", end=":") for i in range(100, 1000): s = str(i) if pow(int(s[0]), 3) + pow(int(s[1]), 3) + pow(int(s[2]), 3) == i: print(i, end=",") answer3() def answer4(): """ 领用divmod函数来计算 :return: """ print("\n输出四", end=":") for i in range(100, 1000): m = i sumNum = 0 while m > 0: m, n = divmod(m, 10) sumNum += n ** 3 if sumNum == i: print(i, end=",") answer4() def answer5(): """ 利用列表for if 用法来实现 :return: """ print("\n输出五", end=":") L = [i for i in range(100, 1000) if (i // 100) ** 3 + (i // 10 % 10) ** 3 + (i % 10) ** 3 == i] print(L) answer5()