Python初学者8号 发表于 2021-8-11 11:25:24

关于自己写min()的问题

本帖最后由 Python初学者8号 于 2021-8-11 16:07 编辑

算了,我这么说吧,如题,辗转相除法求最大公约数
def gcd(x,y):
    returnc, d = x // y,x % y ;print('{0}/{1}={2}......{3}'.format(x,y,c,d))
gcd(1999,615)

我想要在函数执行之后,完成赋值并且打印的操作,我这个代码是打个比方,我知道是错的,我就是想问有没有这样的操作{:10_266:}

wp231957 发表于 2021-8-11 11:25:25

Python初学者8号 发表于 2021-8-11 16:08
我重写了 哥

嗯,知道你很辛苦又重写了一遍需求
然,还是没明白你的意思

def gcd(x,y):
    c,d = x // y,x % y
    print('{0}/{1}={2}......{3}'.format(x,y,c,d))
    return (c,d)
gcd(1999,615)

一般 ,我们不在函数内部print输出   除非你是为了调试一些什么东西

wp231957 发表于 2021-8-11 11:40:19

没看明白你想干嘛

Python初学者8号 发表于 2021-8-11 11:46:52

wp231957 发表于 2021-8-11 11:40
没看明白你想干嘛

能完成比较运算的话,的话就算出最小值然后还打印出来那句话

2012277033 发表于 2021-8-11 11:51:07

Python初学者8号 发表于 2021-8-11 11:46
能完成比较运算的话,的话就算出最小值然后还打印出来那句话

你直接将return minn替换成    print ('the minimum number of the parameter is {0}'.format(minimum(minn)))不就可以了...

Python初学者8号 发表于 2021-8-11 12:06:45

2012277033 发表于 2021-8-11 11:51
你直接将return minn替换成    print ('the minimum number of the parameter is {0}'.format(minimum(mi ...

我运行了一下,试错的{:10_277:}

老迈 发表于 2021-8-11 12:09:23

看不明白

2012277033 发表于 2021-8-11 12:09:47

Python初学者8号 发表于 2021-8-11 12:06
我运行了一下,试错的

..我直接复制的,没仔细看{:10_282:}
应该是这样
print ('the minimum number of the parameter is {0}'.format(minn))

Python初学者8号 发表于 2021-8-11 15:41:01

老迈 发表于 2021-8-11 12:09
看不明白

我重写了,哥

Python初学者8号 发表于 2021-8-11 15:42:42

2012277033 发表于 2021-8-11 12:09
..我直接复制的,没仔细看
应该是这样

不不不,我重写了需求,哥

Python初学者8号 发表于 2021-8-11 16:08:10

wp231957 发表于 2021-8-11 11:40
没看明白你想干嘛

我重写了 哥

wp231957 发表于 2021-8-11 16:30:43

Python初学者8号 发表于 2021-8-11 16:08
我重写了 哥

如果你是想看一下 辗转相除法的运作过程,我给你写了一个,你看一下

wp231957 发表于 2021-8-11 16:36:06

Python初学者8号 发表于 2021-8-11 16:08
我重写了 哥

所以简化一下,辗转相除最后应该是:
def gcd(x,y):
    if x<y: x,y=y,x
    if x % y ==0: return y
    return gcd(y,x%y)
print(gcd(999,6165))

阿奇_o 发表于 2021-8-11 16:40:10

这属于判断对象类型的问题,一般用 isinstance(),
通常可以结合字典做一个通用统计函数,统计各类型出现的次数,如
>>> ls = ['a', 1, 2, 'c']
>>> def hist(ls):
        cf = dict()
        for i in ls:
                if isinstance(i, str):
                        cf['str'] = cf.setdefault('str', 0) + 1
                elif isinstance(i, int):
                        cf['int'] = cf.setdefault('int', 0) + 1
        return cf

>>> hist(ls)
{'str': 2, 'int': 2}
>>>

# 这样你就很方便调用 cf 来判断了,如
>>> cf = hist(ls)
>>> if cf['str'] > 0 and cf['int'] > 0:
        print("既有字符串,又有整数,你准备如何处理?")
        pass

既有字符串,又有整数,你准备如何处理?
>>>

Python初学者8号 发表于 2021-8-11 17:19:07

wp231957 发表于 2021-8-11 16:15
嗯,知道你很辛苦又重写了一遍需求
然,还是没明白你的意思



懂了,所以无法在return写太多的东西了{:10_266:}

Python初学者8号 发表于 2021-8-11 17:20:21

wp231957 发表于 2021-8-11 16:30
如果你是想看一下 辗转相除法的运作过程,我给你写了一个,你看一下

我也在用jupyter哈哈

你写的好快啊,而且还多了一个大小判断,很全面!!

还有这个第二个return很牛逼,我想到了这点,但是我不会用这个东西,这个是叫递归调用还是闭包来着,我没搞懂这个东西,也没去碰他

感谢你的帮助!!{:10_254:}

Python初学者8号 发表于 2021-8-11 17:25:01

阿奇_o 发表于 2021-8-11 16:40
这属于判断对象类型的问题,一般用 isinstance(),
通常可以结合字典做一个通用统计函数,统计各类型出现 ...

你的isinstance提醒了我还有这个东西在,这个东西真好用啊!!

十分感谢你的解答,不过我的需求是想知道return可不可多放几个句子进去(比如print语句),但是你的回答还是对我有很大的帮助,感谢感谢{:10_254:}

wp231957 发表于 2021-8-11 18:07:10

Python初学者8号 发表于 2021-8-11 17:20
我也在用jupyter哈哈

你写的好快啊,而且还多了一个大小判断,很全面!!


自己调用自己叫递归
函数里面嵌套函数(名字不一样)这是闭包

Python初学者8号 发表于 2021-8-12 08:49:48

wp231957 发表于 2021-8-11 18:07
自己调用自己叫递归
函数里面嵌套函数(名字不一样)这是闭包

很经典的案例,感谢大哥的帮助!{:10_254:}
页: [1]
查看完整版本: 关于自己写min()的问题