栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python经典编程习题100题之第3题:判断完全平方数

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python经典编程习题100题之第3题:判断完全平方数

文章目录
  • 前言
  • 第3例:判断完全平方数
  • 遇到的问题总结


前言

记录学习Python经典编程习题100例
参考
题目来源和参考-魏宝航

第3例:判断完全平方数

题目描述:

一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

解题思路:

分别进行判断是否能进行开平方

我方法的代码:

def wanQuan(x):
    # 输入一个值,判断是否满足加上100后是一个完全平方数,再加上168又是一个完全平方数的条件
    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
                        # print("第3个错误处")
                        break
                    else:
                        a = False
                        # print("第2个错误处")
            else:
                a = False
                # print("第1个错误处"+str(i))
    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):
    # 输入一个值,判断是否满足加上100后是一个完全平方数,再加上168又是一个完全平方数的条件
    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):
    # 输入一个值,判断是否满足加上100后是一个完全平方数,再加上168又是一个完全平方数的条件
    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都对每一处进行排查,不能习惯性的认为没有错

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/918458.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号