mumei2018 发表于 2023-5-1 16:04:02

请问18期作业求水仙花数那题 我这个怎么算不出来呢

本帖最后由 mumei2018 于 2023-5-1 16:15 编辑

for i in range(100,1000):
    if i == (i//100)**3 +(i%100-i%10) **3 + (i%10)**3:
      #(i//100)得到百位 (i%100-i%10)得到十位 (i%10)得到各位
      print(i)

我这个只能得到一个水仙花数 407 前面的都没有

我第一回发帖的时候 手滑把中间一小段删了 现在补回来了 上面红色那段 作业里是有些的    然后我发现(i%100-i%10)并不能得到十位 我改成这样((i%100-i%10)%10)但还是只有407了

   

isdkz 发表于 2023-5-1 16:05:21

您的代码中有一些小错误,让我帮您修正一下:

for i in range(100, 1000):
    if i == (i // 100) ** 3 + ((i % 100) // 10) ** 3 + (i % 10) ** 3:
      # (i // 100) 得到百位,((i % 100) // 10) 得到十位,(i % 10) 得到个位
      print(i)


您之前的代码在计算十位数时缺少了 ((i % 100) // 10) ,这部分代码用于获取十位数。现在这个修改后的代码应该可以正确计算水仙花数了。

陶远航 发表于 2023-5-1 16:06:12

您的代码存在两个问题。

首先,计算水仙花数的公式是:将一个三位数的百位、十位、个位上的数字分别立方后求和,如果等于该三位数本身,则为水仙花数。但您的代码中计算公式存在错误,应该是 (i//100)**3 + ((i0)//10)**3 + (i)**3。

其次,您的代码中缺少一个循环判断语句。您只判断了 100 到 999 中是否有一个数等于 407,而没有对所有数进行判断。您需要将 if 语句放到循环中,对 100 到 999 中的每个数都进行判断。

修改后的代码如下所示:
for i in range(100, 1000):
    if i == (i//100)**3 + ((i0)//10)**3 + (i)**3:
      print(i)
这段代码将输出所有三位数的水仙花数。

mumei2018 发表于 2023-5-1 16:17:59

陶远航 发表于 2023-5-1 16:06
您的代码存在两个问题。

首先,计算水仙花数的公式是:将一个三位数的百位、十位、个位上的数字分别立方 ...

for i in range(100, 1000):
    if i == (i//100)**3 + ((i0)//10)**3 + (i)**3:
      print(i)

不好意思 您这有几个字符缺失了 我这看不见

mumei2018 发表于 2023-5-1 16:21:05

本帖最后由 mumei2018 于 2023-5-1 16:24 编辑

isdkz 发表于 2023-5-1 16:05
您的代码中有一些小错误,让我帮您修正一下:




我第一回发帖的时候 手滑把中间一小段删了 现在补回来了 上面红色那段 作业里是有些的    然后我发现(i%100-i%10)并不能得到十位 我改成这样((i%100-i%10)%10)但还是只有407了   后来我发现都不用减去个位了 直接 ((i%100)//10)

isdkz 发表于 2023-5-1 16:23:10

mumei2018 发表于 2023-5-1 16:21
我第一回发帖的时候 手滑把中间一小段删了 现在补回来了 上面红色那段 作业里是有些的    然后我发现(i%1 ...

我明白您的问题了。问题出在您计算十位数的方法上。您可以使用 (i % 100) // 10 来计算十位数。这是因为 i % 100 会去掉百位数,然后 // 10 会去掉个位数,从而得到十位数。这是修改后的代码:

for i in range(100, 1000):
    if i == (i // 100) ** 3 + ((i % 100) // 10) ** 3 + (i % 10) ** 3:
      # (i // 100) 得到百位,((i % 100) // 10) 得到十位,(i % 10) 得到个位
      print(i)


这段代码应该可以正确计算并输出所有的水仙花数。

陶远航 发表于 2023-5-1 16:24:57

你的代码有一个小错误,导致只能得到水仙花数 407。问题出在 if 语句中,你使用了减号 - 来计算十位和个位的立方和,这是错误的。应该使用加号 +,才能正确计算十位和个位的立方和。以下是修正后的代码:
for i in range(100, 1000):
    if i == (i//100)**3 + ((i%100)//10)**3 + (i%10)**3:
      print(i)

在这个修正后的代码中,我们使用了两个 % 运算符来得到十位和个位上的数字。首先,i % 100 取出 i 的后两位,即十位和个位的数字。接下来,i % 10 取出 i 的个位上的数字。为了得到十位上的数字,我们需要先将 i 的后两位减去个位上的数字,再除以 10,即 ((i % 100) - (i % 10)) // 10。

注意,这个代码中用到了两次除法运算符 // 来进行整数除法。这是因为在 Python 中,除法 / 的结果是浮点数,即使两个操作数都是整数。如果你要进行整数除法,需要使用 // 运算符。

修正后的代码应该可以正确地输出所有的水仙花数。

mumei2018 发表于 2023-5-1 16:25:35

isdkz 发表于 2023-5-1 16:23
我明白您的问题了。问题出在您计算十位数的方法上。您可以使用 (i % 100) // 10 来计算十位数。这是因为...

谢啦 我刚刚又看了一遍发现我改的还是错的 你那个就是对的 正常运行了

isdkz 发表于 2023-5-1 16:26:24

mumei2018 发表于 2023-5-1 16:25
谢啦 我刚刚又看了一遍发现我改的还是错的 你那个就是对的 正常运行了

不客气{:5_109:}

mumei2018 发表于 2023-5-1 16:26:30

陶远航 发表于 2023-5-1 16:24
你的代码有一个小错误,导致只能得到水仙花数 407。问题出在 if 语句中,你使用了减号 - 来计算十位和个位 ...

好的 谢啦 其实关键还是我算错了十位
页: [1]
查看完整版本: 请问18期作业求水仙花数那题 我这个怎么算不出来呢