Python如何对数组列表求和?三位数立方及自幂数求解
解决三位数各位数字立方和计算及筛选问题
先修正单个数字的立方和计算代码
你原来的sum_of_digits_cubed函数存在问题:它没有使用传入的参数y,而是直接依赖外部变量a,复用性差。可以把拆分数字和求和合并成一个更简洁的函数:
def digit_cube_sum(n): # 直接计算各位数字的立方和,无需先返回数组 return sum(int(digit)**3 for digit in str(n)) # 测试单个数字 n = 123 print(digit_cube_sum(n)) # 输出36,符合预期
生成所有三位数的立方和列表
你之前的list_split_cube函数只是打印数组,没有返回值,所以变量a会是None。现在用上面的函数批量计算:
# 生成100到999所有数的立方和列表 three_digit_cube_sums = [digit_cube_sum(num) for num in range(100, 1000)] # 打印前4个结果,对应你给出的数组求和:1、2、9、28 print(three_digit_cube_sums[:4]) # 输出 [1, 2, 9, 28]
筛选出各位立方和等于自身的数(阿姆斯特朗数)
直接用列表推导式筛选即可:
# 筛选三位数中的阿姆斯特朗数 armstrong_numbers = [num for num in range(100, 1000) if digit_cube_sum(num) == num] print(armstrong_numbers) # 输出 [153, 370, 371, 407]
为什么你之前添加sum会出错?
你原来的list_split_cube函数没有返回任何数据(仅执行print操作),所以a是None,对None调用sum自然会报错。现在的方案直接跳过生成数组的步骤,直接计算求和结果,更高效也更简洁。
内容的提问来源于stack exchange,提问作者user19608440
相关产品推荐
相关产品推荐

