目录
一、题外话
二、 思路分析
三、 开始写代码
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!