|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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次迭代,超过计算次数或者无解都能报错,
结果惊奇的发现修改后的代码和小甲鱼老师的一模一样....老师那样写果然都是有原因的,唉,偷懒偷不成了 |
评分
-
查看全部评分
|