Python之算法解决问题实例

这是对上一篇的补充,用一个具体案例讲解如何一步步解决问题,得到正确的代码。

问题描述

首先,请注意在与早期版本相比,这个版本有一些细微的差别。前面提到,关于两个浮点值是否相等,没有精确的定义。实际上差距“足够小”就可以了。现在引人了“公差”(toleranee)的概念。也就是说,两个数之间的差值在小于规定的公差时,算法就认为是“足够好”的。算法要求如下。
1)用户提供三个输入:要计算平方根的整数、初始猜测值、浮点型公差。如果某一轮求出的值与上一轮求出的值之间的差值小于公差,算法结束。
2)巴比伦平方根算法:
(a)猜测数字的平方根。
(b)用猜测的数字除原数。
©计算步骤(b)的商与猜测数的平均值。
(d)对第©步的平均值再作猜测。
(e)如果新的猜测值与旧的猜测值不同,则回到第(b)步;否则,停止。
3)输出初始条件(数字、猜测值、公差),平方根的值和求出平方根所需的循环次数(猜测次数)。

搭建框架

#1、用户输入整数(两个整数、一个浮点数)
#2、按上述步骤完成算法
#3、输出三个原始值
#4、输出循环次数和平方根

输出

把需要输出的内容加上

输入

需要输入所要计算的整数。

numberStr=input("输入想要计算的整数:")
number=int(numberStr)

但如果用户此时输入了非数字,会怎样呢?
所以要对输入进行检查,如果不是数字,提示用户再次输入,直到输入正确为止,跳出循环,把输入内容转成int类型。
这里用到了重复执行和条件判断。

numberStr=input("输入想要计算的整数:")
while not numberStr.isdigit():
	print("输入错误")
	numberStr=input("输入想要计算的整数:")
number=int(numberStr)

到这里可以先运行测试一下。
要注意输人验证的安全隐患。在得到预期的输入前,程序不会往后继续运行,因此其他不正确的输人都被拒绝了。这样做,基于错误输入的安全攻击都将被删除,程序使用起来也更安全。
继续进行其他输入:

numberStr=input("输入想要计算的整数:")
while not numberStr.isdigit():
	print("输入错误")
	numberStr=input("输入想要计算的整数:")
number=int(numberStr)

guessStr=input("初始猜测值:")
while not guessStr.isdigit():
	print("输入错误")
	guessStr=input("初始猜测值:")
guess=int(guessStr)

originalGuess_int=guess
count_int=0
tolerance_float=float(input("公差值:"))

print(number,"的平方根是",guess)
print("公差值:",tolerance_float)
print("求出平方根所需要的循环次数:",originalGuess_int)

进行运算

numberStr=input("输入想要计算的整数:")
while not numberStr.isdigit():
	print("输入错误")
	numberStr=input("输入想要计算的整数:")
number=int(numberStr)

guessStr=input("初始猜测值:")
while not guessStr.isdigit():
	print("输入错误")
	guessStr=input("初始猜测值:")
guess=int(guessStr)

originalGuess_int=guess
count_int=0
tolerance_float=float(input("公差值:"))
#运算过程
previous_int=0
count_int=0
while previous_int-guess>tolerance_float:
	previous_int=guess
	quotient=number/guess
	guess=(quotient+guess)/2
	count_int=count_int+1

print(number,"的平方根是",guess)
print("公差值:",tolerance_float)
print("求出平方根所需要的循环次数:",originalGuess_int)

在这里插入图片描述
答案错误
依次检查:
输入正确——previous初始值为0,没错——进入循环后,previous和guess的差值为-5,-5>0.0000001为Flase,所以没有进入循环。

给差值加上绝对值,记得加上import math
while math.fabs(previous_int-guess)>tolerance_float:

在这里插入图片描述

完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值