练手小程序:计算根号二程序

目录

一、题外话

二、 思路分析

三、 开始写代码

3.1 平方square()函数

3.2 输入位数inputNum()函数

3.3 numS干什么用?

3.4 main()主函数

四、 成品

五、 有待改进……


人生苦短,我用Python!

一、题外话

困扰现在程序员的两大难题:

It doesn't work...Why?

It works...Why?

二、 思路分析

首先,我先让用户输入精确到的位数

接着,从1开始算,每次加一个计数单位(位数决定),计算它的平方数,如果误差小于numS的的1%的倒数,1/(numS(抱歉,实在无法描述numS,后文有代码)/100)就换行输出这个数及它的平方数,否则不换行,输出这个数。这样不断进行,到2为止

三、 开始写代码

3.1 平方square()函数

有一个参数num,输入进去,返回num的平方数。

代码很简单:

#平方函数
def square(num):
    return num*num

3.2 输入位数inputNum()函数

这个函数的逻辑为:

先设置一个numS为1,为后面记录扩大缩小倍数所用。

接着用input()函数让用户输入位数。

然后让这个numS*10的位数次方,记录扩大缩小的倍数。

最后返回numS。

代码为:

#输入位数函数
def inputNum():
    numS = 1
    for times in range(int(input("输入位数:"))):
        numS *= 10
    return numS

3.3 numS干什么用?

numS在2.1有出现过(……即1/(numS(抱歉,实在无法描述numS,后文有代码)/100),……)

和2.2.1出现过(……先设置一个numS为1,为后面记录扩大缩小倍数所用。……然后让这个numS*10的位数次方,记录扩大缩小的倍数。……)

那么问题来了,你知道我用的numS有什么用吗?

答:我在main()主函数中需要循环(“从1开始算,……,到2为止。”,这些操作是重复执行的,所以要用循环),我需要遍历从1到2的所有(位数)位小数,正好可以用range()函数。但是range()函数用法是这样的:

range(start, stop[, step]) ->range object

其中,start、stop、step都必须是正整数。那就和遍历的小数内容就冲突了。

这时,我们可以通过让1~2的所有小数在遍历时×numS,扩大成整数,就可以了。

3.4 main()主函数

首先,让使用者输入位数得到numS。

然后,

遍历用range()函数生成的从1的numS倍到2的numS倍的公差为1的等差数列,看这个实际小数的平方与2的差是否在(1/(numS/100)以内,是则换行输出,否则普通输出。

代码应为:

#主函数
def main():
    numS = inputNum()
    for num in range(1*numS, 2*numS, 1):
        if -(1/(numS/100)) <= 2-square(num/numS) <= (1/(numS/100)):
            print("\n", num/numS, square(num/numS))
        else:
            print(num/numS, end=" ")
    return

四、 成品

"""计算根号二的程序
@Python_programs"""


def inputNum():
    numS = 1
    for times in range(int(input("输入位数:"))):
        numS *= 10
    return numS


def square(num):
    return num*num


def main():
    numS = inputNum()
    for num in range(1*numS, 2*numS, 1):
        if -(1/(numS/100)) <= 2-square(num/numS) <= (1/(numS/100)):
            print("\n", num/numS, square(num/numS))
        else:
            print(num/numS, end=" ")
    return


main()

五、 有待改进……

这个程序运行速度较慢,在idle上运行结果:

 为了让运行速度变快,我做了修改:

for num in range(1*numS, 2*numS, 1):

更为:

for num in range(1.41*numS, 2*numS, 1):

结果:

Traceback (most recent call last):
  File "C:\Users\lion\Desktop\编程作品集\Python作品集\计算根号二程序.py", line 25, in <module>
    main()
  File "C:\Users\lion\Desktop\编程作品集\Python作品集\计算根号二程序.py", line 17, in main
    for num in range(1.41*numS, 2*numS, 1):
TypeError: 'float' object cannot be interpreted as an integer

有能力的可以帮我改一改哦!

人生苦短,我用Python!

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值