前言
记录学习Python经典编程习题100例 参考 题目来源和参考-魏宝航
第3例:判断完全平方数
题目描述:
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
解题思路:
分别进行判断是否能进行开平方
我方法的代码:
def wanQuan(x):
a = False
for i in range(10000):
if a == 1:
break
else:
if i*i == x+100 :
for j in range(10000):
if j*j == x+268:
a = True
break
else:
a = False
else:
a = False
return a
x = 0
for x in range(-99,10000):
while 1 :
a = wanQuan(x)
if a == False:
break
else:
print("该数为:" + str(x))
break
学习的代码:
x=0
for x in range(-100,10000):
flag1=0
flag2=0
for i in range(10000):
if i*i==x+100:
flag1=1
break
for i in range(10000):
if i*i==x+100+168:
flag2=1
break
if flag1 and flag2:
print(x)
其思路是:
暴力计算 用两个for循环分别判断是否满足两次完全平方
不同之处在于
1.我将其整合成函数形式 2.我先进第一个完全平方判断,如果第一个不满足就不进行第二完全平方判断
遇到的问题总结
错误的代码1
import cmath
def wanQuan(x):
if cmath.sqrt((x+100)) == 0 :
print("对")
if cmath.sqrt((x+268)) == 0 :
return True
else:
return False
a = False
x = -99
while False :
a = wanQuan(x)
if a == False:
x += 1
else:
print("该数为:" + str(x))
break
错误思考
1.错误的认为把开方后的数就等于0 2.可以进一步思考,是否有类似判断开方后为整数的方式 错误代码2
def wanQuan(x):
for i in range(10000):
if i*i == x+100:
for j in range(10000):
if j*j == x+268:
a = True
break
else:
a = False
print("第2个错误处")
else:
a = False
print("第1个错误处")
break
return a
错误思考
该函数,如果i值不满足i*i==x的话,for第一次就跳出循环,这样是不对的,原本for的目的是检索该循环是否有满足完全平方的条件,有满足两次完全平方就跳出,没有就结束
注意
要避免陷入思维陷阱,每一次dug都对每一处进行排查,不能习惯性的认为没有错
|