ricky$ 发表于 2020-10-29 12:13:21

pyhton017函数的课后作业

小菜鸟的学习之路又碰壁了,呜呜呜呜~~~再次希望路过大神不吝赐教{:5_109:}
1、利用欧几里得算法,求最大公约数
def gcd(x, y):
    while y:
      t = x % y
      x = y
      y = t

    return x
   
print(gcd(4, 6))

这是佳宇老师的答案,我的疑问是:
1、最后循环输出的返回值,难道不是Y嘛,举例gcd(9,2)
t = (9/2的余数)=1
x = 2
y = 1
while循环,t = (2/1的余数)=0
这个时候1就是最大公约数了,而1=y,所以为什么return返回了x呀

2、编写一个十进制转换为二进制的函数,要求用除2取余的方法

def zuoye02(num1, num2):
    a = bin(num1 % 2)
    b = bin(num2 % 2)
    print(num1 ,num2 , "转换为二进制是" , a,b)

这是我写的函数,调用zuoye02()检验的时候,输出值也是对的

def Dec2Bin(dec):
    temp = []         #先建立一个列表的初始值
    result = ''            #建立一个结果的初始值,方便后面计算

    while dec:         #当参数dec为ture时,开始循环以下内容
      quo = dec % 2 #将参数除2的余数赋值给quo的变量名
      dec = dec // 2#将参数地板除2的值赋值给dec(向下取整)
      temp.append(quo)#将循环计算得出的quo值添加进temp的列表中,默认在末尾,temp列表中现在元素均为余数,但是到这里是在确认什么?或者是为什么要这样做呢?

    while temp:         #temp为ture时,开始循环以下
      result += str(temp.pop())   #结果加上,temp列表中最后一个元素并以字符串的形式显现出来

    return result          #返回result结果的值

print(Dec2Bin(62))
这是佳宇老师的答案
我不是特别理解,我先说一下我的理解哈,就是我好像理解大部分语句,但是不明白为什么要这样写,天{:5_100:}

Stubborn 发表于 2020-10-29 12:31:58

第一个问题,循环了吗,y的值不是赋给x了吗?所以返回x

2进制,即只有1,0,逢2进1
10进制,逢10进制。

10转2,例子:8的二进制是1000表示。
8/2->余0等4
4/2->余0等2
2/2->余0等1
1/2->余1等0
余数结合起来就是1000

heidern0612 发表于 2020-10-29 15:05:53

看看这个吧,以前写的:戳我前进

ricky$ 发表于 2020-10-29 20:34:31

Stubborn 发表于 2020-10-29 12:31
第一个问题,循环了吗,y的值不是赋给x了吗?所以返回x

2进制,即只有1,0,逢2进1


谢谢大佬!!!!明白惹!!!{:5_109:}
页: [1]
查看完整版本: pyhton017函数的课后作业