首先,什么是因数
因数是指整数a除以整数b(b≠0) 的商正好是整数而没有余数,我们就说b是a的因数。
从因数的定义上来看,因数的主要求法,就是除法,看结果是否为整数。
但是在python中,除法会返回为float,而float转int会被抹零,这就导致我们无法用除法的方式来求因数
type(10/2)
- 1
<class 'float'>
- 1
既然,我们无法用除法的方式来求因数
换个思路
那么为什么不用乘法呢?
在python中,乘法运算的返回值,是int,这样问题不就完美解决了么~
type(5*2)
- 1
<class 'int'>
- 1
首先,我们生成一个列表,用来遍历从1开始到我们要求数字的因数,以10为例,因为我们要取到10,并且从1开始,故列表这样写
list1 = [i for i in range(1, 11)]
- 1
这样就能得到一个1-10的列表
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- 1
接下来,我们需要一个反序的列表,也很简单
list2 = list1[::-1]
- 1
这样就得到了一个反序的列表
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
- 1
我们还要生成一个空列表,用来保存我们得到的数据
list3 = []
- 1
接下来,我们的目的是要让列表1的每一个数字,和列表2中的每一个数字相乘,然后判断所得值是否为10即可,是的话,就是我们需要的值,将所得的值保存到我们之前建立的空列表即可。
for a in list1:
for b in list2:
if a * b == 10:
list3.append(a)
- 1
- 2
- 3
- 4
利用循环嵌套,完美解决这一问题。
最后,完整运代码:
list1 = [i for i in range(1, 11)]
list2 = list1[::-1]
list3 = []
for a in list1:
for b in list2:
if a * b == 10:
list3.append(a)
print(f'10的因数有:{list3}')
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
输出结果:
10的因数有:[1, 2, 5, 10]
- 1
8行代码,大功告成~
接下来,我们简单的升级一下需求, 要求任意数字的因数,再加上计数。
想求任意数字的因数,只需要增加一个接口,输入就可以了。
在首行代码,增加输入接口:
x = input('请输入你想求的数字:')
- 1
然后,把x的值传给列表1的推导式
list1 = [i for i in range(1, int(x)+1)]
- 1
注意:input的默认函数类型为str,故需要转换成int类型。
接下来的步骤都差不多了,只需要再增加一个计数器就好了。
x = input('请输入你想求的数字')
list1 = [i for i in range(1, int(x)+1)]
list2 = list1[::-1]
list3 = []
count = 0
for a in list1:
for b in list2:
if a * b == int(x):
list3.append(a)
count += 1
print(f'{x}的因数有{list3},共有{count}个')
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
测试:
请输入你想求的数字:45
45的因数有[1, 3, 5, 9, 15, 45],共有6个
- 1
- 2
完美~