鱼C论坛

 找回密码
 立即注册
查看: 673|回复: 7

[已解决]0基础学习py,第十七讲的课后作业看不懂啊

[复制链接]
发表于 2018-10-21 14:04:46 | 显示全部楼层 |阅读模式

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

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

x
哪位大神能不能解释下,这到底是什么意思啊,这是课后的答案
1. 编写一个函数,利用欧几里得算法(脑补链接)求最大公约数,例如gcd(x, y)返回值为参数x和参数y的最大公约数。

def gcd(x, y):
    while y:
        t = x % y
        x = y
        y = t

    return x
   
print(gcd(4, 6))
这是我写的(到else哪里就没有返回值)

def ojld(a,b):
    if a>=b and b>0:
            if a%b==0:
                print(b)
            else:
                while 1==1:
                    c=a%b
                    if c==0:
                        print(b)
                    break
    else:
        print('error')

哎,自己脑子也不算很清楚,有没有大神解释下答案的意思,顺便帮我看看我写的怎么样,感觉自己不适合学Py啊,脑子不行.
最佳答案
2018-10-21 21:56:07
我就按照你的这个代码思路简单说说吧
def ojld(a,b):
    if a>=b and b>0: #这里只需要b>0就行了吧
            if a%b==0:
                print(b)
            else:
                while 1==1: # 这里可以写为 While True:
                    c=a%b  #这儿你要再想想让a,b的值发生改变
                    if c==0:
                        print(b)
                    break  #这个break 你应该是想放在上面那个if里面吧? 但是这儿少了一个缩进,所以就直接放在了while下面,因此循环了一次就直接退出了.
                                导致你说的else没有反应,   然后还有个问题,就是你就算把break放进了if下面,那这个将会成为死循环,因为你的a,b的值并没有因为C=a%b
                                改变,也就是C 不会等于0,也就进入不了下面那个if语句中,然后死循环下去
    else:
        print('error')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-21 14:18:58 | 显示全部楼层
def gcd(x, y):
    while y:
        t = x % y
        x = y
        y = t
    return x
每次循环将y变成x对y的余数,x变成y,每次变化公约数值不变,这样x,y越来越趋近于公约数最终
余数为0,y就是公约数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2018-10-21 16:18:02 | 显示全部楼层
还没学到这里,学到了告诉你哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-21 19:26:56 From FishC Mobile | 显示全部楼层
也是新手一个 看懂一点说一点吧 你的代码里 你只编辑了 只用算一步就得到最大公约数的代码 关键的 如果 一步不能到位 就要进行值的转换 并循环
就是把除数赋值给被除数 余数赋值给除数 一直除到余数为 0 最后一步的余数即最大公约数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-21 21:56:07 | 显示全部楼层    本楼为最佳答案   
我就按照你的这个代码思路简单说说吧
def ojld(a,b):
    if a>=b and b>0: #这里只需要b>0就行了吧
            if a%b==0:
                print(b)
            else:
                while 1==1: # 这里可以写为 While True:
                    c=a%b  #这儿你要再想想让a,b的值发生改变
                    if c==0:
                        print(b)
                    break  #这个break 你应该是想放在上面那个if里面吧? 但是这儿少了一个缩进,所以就直接放在了while下面,因此循环了一次就直接退出了.
                                导致你说的else没有反应,   然后还有个问题,就是你就算把break放进了if下面,那这个将会成为死循环,因为你的a,b的值并没有因为C=a%b
                                改变,也就是C 不会等于0,也就进入不了下面那个if语句中,然后死循环下去
    else:
        print('error')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-22 11:25:50 | 显示全部楼层
Will_M 发表于 2018-10-21 21:56
我就按照你的这个代码思路简单说说吧
def ojld(a,b):
    if a>=b and b>0: #这里只需要b>0就行了吧

因为自己一直想不清楚循环是怎么运行的,对于缩进也不太会用,感觉学起来很吃力,代码我看得懂,但是自己写的话往往不尽如人意,感谢你的指点,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-22 11:26:46 | 显示全部楼层
fishclove 发表于 2018-10-21 19:26
也是新手一个 看懂一点说一点吧 你的代码里 你只编辑了 只用算一步就得到最大公约数的代码 关键的 如果 一 ...

其实自己不太明白欧几里得的算法,你这么一说我好像有点明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-22 16:09:57 | 显示全部楼层
ZHOUYU1993 发表于 2018-10-22 11:26
其实自己不太明白欧几里得的算法,你这么一说我好像有点明白了

能帮到你就好 一起加油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 15:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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