鱼C论坛

 找回密码
 立即注册
查看: 3468|回复: 9

最大公约数问题,请帮看看我的代码出了什么问题怎行修改比较好

[复制链接]
发表于 2016-8-4 14:44:13 | 显示全部楼层 |阅读模式

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

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

x
  1. >>> def gcd(x,y):
  2.         if x % y == 0:
  3.                 return y
  4.         else:
  5.                 if  y % (x % y) == 0:
  6.                         return y % (x % y)

  7.                
  8. >>> print(gcd(6,3))
  9. 3
  10. >>> print(gcd(4,2))
  11. 2
  12. >>> print(gcd(6,9))
  13. None
复制代码



我看了百度理解了什么是最大公约数后自己按照它的含义写的,可是当x<y的时候出问题了,返回None,请问能在这个代码中加些什么解决这个问题吗?(就是无论x和y谁大都能正常输出)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-8-4 15:22:31 | 显示全部楼层
本帖最后由 shuofxz 于 2016-8-4 15:24 编辑

既然是只有x>y的时候才能正常输出,那就在函数开始加一个大小的判断呗
  1. >>> def gcd(x,y):
  2.         if y > x:
  3.                 temp = x
  4.                 x = y
  5.                 y = temp

  6.         if x % y == 0:
  7.                 return y
  8.         else:
  9.                 if  y % (x % y) == 0:
  10.                         return y % (x % y)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-4 15:31:22 | 显示全部楼层
加一句
---------------------------
def gcd(x,y):
    x,y=(y,x) if x<y else (x,y)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-4 16:12:09 | 显示全部楼层
按2楼的方法就ok了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-4 16:29:16 | 显示全部楼层
shuofxz 发表于 2016-8-4 15:22
既然是只有x>y的时候才能正常输出,那就在函数开始加一个大小的判断呗

我能弱弱的说我还是没看懂你加的这个大小的判断
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-4 16:33:18 | 显示全部楼层
SixPy 发表于 2016-8-4 15:31
加一句
---------------------------
def gcd(x,y):

这用到了三元操作符吧?你写的这个我看懂啦谢谢啊!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-4 20:42:59 | 显示全部楼层
本帖最后由 liujie4209 于 2016-8-4 20:44 编辑

楼主的编码,我跑了一下,我的软件始终报错,所以我也编了了代码,
temp1 = input('输入一对数据x:')
temp2 = input('输入一对数据y:')
x = int (temp1)
y = int (temp2)

i = 1
a = []
while i <= x:
    if (x % i == 0) and (y % i == 0):
        a.append(i)

        i=i+1
    else:
        i=i+1
print(a)
print(a[len(a)-1])
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-4 20:52:23 | 显示全部楼层
liujie4209 发表于 2016-8-4 20:42
楼主的编码,我跑了一下,我的软件始终报错,所以我也编了了代码,
temp1 = input('输入一对数据x:')
tem ...

x>y的时候应该是能正常输出,只有在x<y的时候会报错。你的写的好复杂,看得好懵
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-4 20:54:21 | 显示全部楼层
tularrrrr 发表于 2016-8-4 20:52
x>y的时候应该是能正常输出,只有在x

我是新手!多多见谅!刚刚学几天,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-8-4 21:43:14 | 显示全部楼层
tularrrrr 发表于 2016-8-4 16:29
我能弱弱的说我还是没看懂你加的这个大小的判断

这个就是判断加换位置

首先判断x和y的大小,如果x>y那就什么事都没有
如果y>x,那就把x和y的值互换一下,借助了一个中间变量temp,至于为什么非得加一个中间变量,你就自己想一下吧,这是对换两个变量值的时候特别常用的方法,还是自己琢磨明白比较好
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-22 02:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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