📅  最后修改于: 2023-12-03 15:39:17.415000             🧑  作者: Mango
在编程中,有时我们需要将一个数字按照可被给定数字整除的方式分成两部分。例如,将1~100中可被3整除的数字分为一组,不可被3整除的数字分为一组。这样的操作在数学、统计、计算机科学中很常见。下面分享一些实现方法。
用循环结构实现的思路很简单,就是依次判断每个数字是否能被给定数字整除,若能,则放入一组,否则放入另一组。
def divide_numbers(start, end, divisor):
divisible_list = []
non_divisible_list = []
for num in range(start, end + 1):
if num % divisor == 0:
divisible_list.append(num)
else:
non_divisible_list.append(num)
return (divisible_list, non_divisible_list)
上面代码中的 divide_numbers
函数接收三个参数:开始数字 start
,结束数字 end
,以及被除数 divisor
。函数返回的是一个元组,其中第一个元素是可被整除数字构成的列表,第二个元素是不可被整除数字构成的列表。
在Python中,还可以用列表推导式实现。列表推导式是一种非常简洁的语法结构,可以快速地生成列表。
def divide_numbers(start, end, divisor):
divisible_list = [num for num in range(start, end + 1) if num % divisor == 0]
non_divisible_list = [num for num in range(start, end + 1) if num % divisor != 0]
return (divisible_list, non_divisible_list)
上面代码同样实现了将数字按照可被给定数字整除的方式分成两部分,但是使用了列表推导式。
在Python内置函数filter()
中,根据给定的函数返回一个序列的子集。如果可被整除,返回True,否则为False。可以使用filter()
函数和lambda
表达式来实现这个功能。
def divide_numbers(start, end, divisor):
divisible_list = list(filter(lambda x: (x % divisor == 0), range(start, end + 1)))
non_divisible_list = list(filter(lambda x: (x % divisor != 0), range(start, end + 1)))
return (divisible_list, non_divisible_list)
以上是三种常见的实现方式,无论是哪种方法都需要注意输入的参数是否合法,例如 start
和end
是否是正整数,divisor
是否是正整数和另一种情况要特殊处理,即 divisor
是否为 0。