Python练习(20200525)
1.求两个数的最大公约数,使用辗转相除法
① 减法:用两个数中较大的数减去较小的数,反复进行上述步骤,直到两个数的值相等,如果最终两个数相同,则这个数就是最大公约数。
1 # 方法一:采用递归函数
2 def func(x,y):
3 if x == y:
4 return '最大公约数:%s'%x
5 else:
6 if x>y:
7 x = x-y
8 return func(x,y)
9 elif x<y:
10 y = y-x
11 return func(x,y)
12 num1 = int(input('num1:'))
13 num2 = int(input('num2:'))
14 res = func(num1,num2)
15 print(res)
16 # =>num1:18
17 # =>num2:48
18 # =>最大公约数:6
19
20 # 方法二:采用while循环
21 def func(x,y):
22 while True:
23 if x == y:
24 return '最大公约数:%s'%x
25 elif x > y:
26 x = x-y
27 elif x < y:
28 y = y-x
29 num1 = int(input('num1:'))
30 num2 = int(input('num2:'))
31 res = func(num1,num2)
32 print(res)
33 # =>num1:48
34 # =>num2:36
35 # =>最大公约数:12
② 除法:两个整数中最大的能够被整除的除数。
1 from functools import reduce
2 def func(x,y):
3 lis1 = list(range(2,101))
4 lis2 = []
5 tag = True
6 while tag:
7 for i in lis1:
8 while True:
9 x1 = x%i
10 y1 = y%i
11 if x1 == 0 and y1 == 0:
12 lis2.append(i)
13 print(lis2)
14 x = x/i
15 y = y/i
16 else:
17 break
18 else:
19 tag = False
20 print(lis2)
21 res = reduce(lambda x,y:x*y,lis2)
22 return '最大公约数:%s'%res
23 num1 = int(input('num1:'))
24 num2 = int(input('num2:'))
25 res = func(num1,num2)
26 print(res)
27 # =>num1:49
28 # =>num2:98
29 # =>[7]
30 # =>[7, 7]
31 # =>[7, 7]
32 # =>最大公约数:49