Juniorboy 发表于 2020-5-16 23:05:42

求水仙花数

本帖最后由 Juniorboy 于 2020-5-16 23:07 编辑

import math
for i in range(100 ,1000) :
    p = 1000
    while p:
      a =i / 100
      b = i / 10 % 10
      c = 1 %10
      if (pow (i,3)==pow(a,3) + pow(b,3)+pow(c,3)) :
            print (i)
      p -= 1
      


for i in range(100, 1000):
    sum = 0
    temp = i
    while temp:
      sum = sum + (temp%10) ** 3
      temp //= 10         # 注意这里要使用地板除哦~
    if sum == i:
      print(i)

第一个代码是我的,但是我的运行之后什么也不打印。
第二个是小甲鱼老师的,没看懂他的思路。
另外再问一下if elif while 这一类的判断条件里面可以有算术运算符吗,我好像记得听过不能有,但是我用了也没报错。

txxcat 发表于 2020-5-16 23:38:12

问题有点多:
import math   #没必要,内置pow就可以用了
for i in range(100 ,1000) :
    p = 1000
    while p:       <---这个真看不懂
      a =i / 100       <---应该是i // 100
      b = i / 10 % 10   #<---应该是i//10%10
      c = 1 %10      #<---应该是i%10,打错成1了
      if (pow (i,3)==pow(a,3) + pow(b,3)+pow(c,3)) :      <---水仙花数理解错误,应该是:if (i==pow(a,3) + pow(b,3)+pow(c,3))
            print (i)
      p -= 1
      
改成:
for i in range(100 ,1000) :
    a =i // 100
    b = i // 10 % 10
    c = i %10
    if i==pow(a,3) + pow(b,3)+pow(c,3) :
      print (i)

RandallSteven 发表于 2020-5-16 23:47:08

第一个代码:没有打印说明没有满足你的if语句,另外你这个while语句中相当于执行了1000次,第1001次才结束循环,但是循环的内容是一样的,因为和p无关;
第二个代码:其实就是100-999每个数字都要求一次各位数数字3次方之和(如:i = 121就是1**3+2**3+1**3 打印的就是10(1+8+1);
判断条件后面的语句要求你的语句返回bool值(True   orFalse)当然0代表False,其他代表True,所以条件语句返回bool值或者一个数字都可以;

liuzhengyuan 发表于 2020-5-17 08:15:15

你要注意 python 和C 不一样
C 语言 260 / 100 =2
但是 python
260 // 100 = 2
260 / 100 = 2.6
python 的变量是没有固定的数据类型的!

Juniorboy 发表于 2020-5-17 13:35:24

RandallSteven 发表于 2020-5-16 23:47
第一个代码:没有打印说明没有满足你的if语句,另外你这个while语句中相当于执行了1000次,第1001次才结束 ...

明白了,谢谢谢谢。

Juniorboy 发表于 2020-5-17 13:35:55

liuzhengyuan 发表于 2020-5-17 08:15
你要注意 python 和C 不一样
C 语言 260 / 100 =2
但是 python


嗯嗯,明白了,谢谢谢谢。

Juniorboy 发表于 2020-5-17 13:37:21

liuzhengyuan 发表于 2020-5-17 08:15
你要注意 python 和C 不一样
C 语言 260 / 100 =2
但是 python


嗯嗯,明白了,谢谢谢谢。
页: [1]
查看完整版本: 求水仙花数