shangshuai 发表于 2023-12-28 20:02:01

python 零基础 第018讲:了不起的分支和循环(V)

编程第一个:
问题> 编写一个程序,求解 100~999 之间的所有水仙花数。
我的代码>
for number in range(100,999):
    str_number = str(number)   
    if number == int(str_number) ** 3 + int(str_number) ** 3 + int(str_number) ** 3:
      print(number)
思路想用切片来求值 但是运行不出来 希望大哥们帮助我

FishC 发表于 2023-12-28 20:02:08

你的代码有一个小错误,在计算水仙花数时,应该是每一位数字的立方和等于原数才对。

改正后的代码如下:

for number in range(100, 999):
    str_number = str(number)
    # 分别计算百位、十位、个位数字的立方和
    digit1 = int(str_number) ** 3
    digit2 = int(str_number) ** 3
    digit3 = int(str_number) ** 3
    # 判断是否为水仙花数
    if number == digit1 + digit2 + digit3:
      print(number)

注意到水仙花数满足每个位上的数字的立方和等于原数,所以我们需要将三位数拆分成百位、十位和个位数字,并分别计算它们的立方和。最后将它们相加,与原数比较,判断是否为水仙花数。

希望能帮到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 2023-12-28 20:08:31

本帖最后由 jackz007 于 2023-12-28 20:16 编辑

for number in range(100,999):
    str_number = str(number)   
    if number == int(str_number) ** 3 + int(str_number) ** 3 + int(str_number) ** 3 : #【错误】:3 个字符的字符串索引应该是 0、1、2。
      print(number):
    这是我改写的不用字符串的版本,谨供楼主参考
for number in range(100 , 1000):
    if number == (number // 100) ** 3 + (number // 10 % 10) ** 3 + (number % 10) ** 3 :
      print(number)
页: [1]
查看完整版本: python 零基础 第018讲:了不起的分支和循环(V)