鱼C论坛

 找回密码
 立即注册
查看: 1933|回复: 0

[技术交流] 《零基础Python》习题笔记(3)——第6讲代码对比

[复制链接]
发表于 2017-8-22 22:50:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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次迭代,超过计算次数或者无解都能报错,
结果惊奇的发现修改后的代码和小甲鱼老师的一模一样....老师那样写果然都是有原因的,唉,偷懒偷不成了

评分

参与人数 1鱼币 +4 收起 理由
小甲鱼 + 4

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 10:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表