马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 jbr 于 2017-8-22 23:21 编辑
第6讲习题地址:http://bbs.fishc.com/thread-37874-1-1.html
动动手第0题:打印0—100所有的奇数,
小甲鱼的代码为:i = 0
while i <= 100:
if i % 2 != 0:
print(i, end=' ')
i += 1
else:
i += 1
我的代码为:i = 0
while i <= 100:
if i%2 == 1:
print(i, end = ',')
i +=1
可见我是一个十分喜欢偷懒的人,能少写就少写
我这里省略了else,但结果是一样的,不知道这样做有什么缺陷,因此在这里请教各位大神
***************************************************************************************************
动动手第2题:求爱因斯坦阶梯的问题
小甲鱼的代码为:x = 7
i = 1
flag = 0
while i <= 100:
if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
flag = 1
else:
x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
i += 1
if flag == 1:
print('阶梯数是:', x)
else:
print('在程序限定的范围内找不到答案!')
而我没像小甲鱼老师一样考虑这么多,直接简单粗暴强上:step = 1
while not (step % 2 == 1 and
step % 3 == 2 and
step % 5 == 4 and
step % 6 == 5 and
step % 7 == 0):
step += 1
print(step)
经过对比,我发现小甲鱼老师的代码考虑到阶梯数一定是7的倍数,不用每次叠加1,计算量要小很多,
于是我也据此优化我的代码,每次叠加7,从而节省了6倍的计算时间step = 7
while not (step % 2 == 1 and
step % 3 == 2 and
step % 5 == 4 and
step % 6 == 5):
step += 7
print('阶梯数是:',step)
关于小甲鱼老师代码里的flag,起初我是认为这部分是毫无意义的,因为程序明显不会走错,一定会有解,所以写它有什么意义呢?
后来我想明白了,万一我们敲代码把条件写错了或者这题本身就是无解的,如果不判断一下是否有解而直接运行程序的话,
我们无法知道程序的运行状态,举个例子:step = 7
while not (step % 2 == 1 and
step % 3 == 2 and
step % 5 == 4 and
step % 6 == 0):
step += 7
print('阶梯数是:',step)
由于判断条件为step不能被2整除且能被6整除,互相矛盾
因此这个程序会无限运行下去而没有任何提示
因此,我也学着小甲鱼老师的方法,给代码做个限制100次迭代,超过计算次数或者无解都能报错,
结果惊奇的发现修改后的代码和小甲鱼老师的一模一样....老师那样写果然都是有原因的,唉,偷懒偷不成了 |