工作中使用的是Java,它和python差别并不大,寒假在家准备重新看一下python。今天在做练习,做到一题不是很难的,但是死活没有做出来,将排查的方法记录下来,希望能对看到这篇文章的你有所帮助。
1.最初
# 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,
# 其各位数字立方和等于该数本身。例如:153是一个"水仙花数",
# 因为153=1的三次方+5的三次方+3的三次方。
# 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,
# 其各位数字立方和等于该数本身。例如:153是一个"水仙花数",
# 因为153=1的三次方+5的三次方+3的三次方。
import math
def check_narcissistic_number(number):
hundred = number / 100
number %= 100
ten = number / 10
digit = number % 10
if (math.pow(hundred, 3) + math.pow(ten, 3) + math.pow(digit, 3)) == number:
return True
return False
for i in range(100, 1000):
if(check_narcissistic_number(i)):
print(i)
打印出来却什么也没有,我首先怀疑的是我取出个十百的方法
“机智“的我打印了它们三者的值,我用了一个很蠢的方法打印
print("%d %d %d"%(hundred, ten, digit))
结果拿153试验,发现打出来的是1 5 3.???
那是哪里有问题?之后我怀疑是我math.pow(hundred,3)使用错了。
print(math.pow(hundred, 3) + math.pow(ten, 3) + math.pow(digit, 3))
结果打印出来发现是179.458577
我将其强转成整型 还是不行。
我将其中的一个打印出来
print(math.pow(hundred, 3))
结果发现是 3.5815 我有些懵,刚刚不是打印的是1吗
结果我使用math.pow(1,3) 打印出来是1
那刚才打印的?我好像发现我是调用的%d
于是我将
print(hundred) #1.53
print(ten) #5.3
print(digit) #3
我好像发现了问题,python里面的/和java里的不一样,它不是自动取整。于是我将 /改成了//
def check_narcissistic_number(number):
hundred = number // 100
number %= 100
ten = number // 10
digit = number % 10
if (math.pow(hundred, 3) + math.pow(ten, 3) + math.pow(digit, 3)) == number:
return True
return False
前面的一串变成了153.0 将其强转了一下,结果还是没有成功,现在我才发现number已经被我改过了。找了一个中间变量,总算成功。
# 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,
# 其各位数字立方和等于该数本身。例如:153是一个"水仙花数",
# 因为153=1的三次方+5的三次方+3的三次方。
import math
def check_narcissistic_number(number):
hundred = number // 100
number %= 100
ten = number // 10
digit = number % 10
if int(math.pow(hundred, 3) + math.pow(ten, 3) + math.pow(digit, 3)) == number:
return True
return False
for i in range(100, 1000):
if(check_narcissistic_number(i)):
print(i)
最终的代码。
简单的一次问题排查。
总结一下:
- java和python 还是有比较大的区别
- java是强类型的,一个变量的类型一定是清楚的,而python则是一个弱类型的语言,不会显式去定义变量类型。所以一定要注意类型。
- java里面的条件控制都是以{}为边界 而python则是以缩进符
- 排查问题 一定要首先定位是哪里有问题,前期可以通过打断点,直接一步跳转到你认为有问题的地方,后期采用打log的方法去排查
debug一定要会,刚开始写 有点懵 加油