首页 > 解决方案 > 如果连接的组合是素数,则接受用户输入并打印

问题描述

我试图弄清楚如何获取用户输入的逗号分隔的数字(例如:1,7)并打印出它们的连接组合是否是素数(例如 7、17、71)。

到目前为止,我采取的步骤是:

#convert user input into a list
values = input("Input some comma separated numbers : ")

num = values.split(",")

但是我不知道在以列表的形式提出所有组合之后该怎么做: num_combination = [1, 7, 17, 71]。

如果我可以像上面那样转换它们,我想我可以编写如下函数:

answer = []
for i in num_combination:
    if i > 1 and i%i ==0:
        answer.append(i)
    else:
        pass

非常感谢您的帮助!

标签: python

解决方案


所以,我不打算回答这个问题,因为我觉得我留下的评论会让你走上正轨,但是你发布的问题似乎有一些有趣的子问题,那会很有趣(而且希望有用)来解决。

1. 如何将一行文本转换成一个数字数组?

你目前有这个代码:

#convert user input into a list
values = input("Input some comma separated numbers : ")

num = values.split(",")

现在,这段代码是需要做的一部分。上面提到的代码中实际上缺少一步,因为现在num是一个包含字符串的数组

>>> num
["1", "7"]

要将其转换为数字数组,您还需要对int数组中的所有元素运行该函数。有多种方法可以做到这一点:

new_num = list(map(int, num))
# OR
new_num = []
for v in num: new_num.append(int(v))
# OR
new_num = [int(v) for v in num]

2. 如何获得数组中元素的所有可能排列和组合?

现在,对我们来说幸运的是,Python 为我们提供了一个实用程序,它至少为我们完成了部分工作。itertools.permutations. 这个函数有两个参数:数组,以及作为排列提供的元素数量:

>>> itertools.permutations(['A','B','C'], 2)
[('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]

但是对于我们的例子,我们需要所有长度的排列,所以我们必须做一些更复杂的事情:

num_permutations = []
for i in range(1,len(num)):
    num_permutations += list(itertools.permutations(num, i))

还有其他方法可以在没有本机函数的情况下获取此排列列表,但它们比此解决方案所需的要详细一些。如果以后有时间,我会介绍它们。

3. 我如何找到素数?

素数的定义是一个具有公正1和自身的素因子的数。这意味着,要检查是否k是质数,需要确保 ( 2, 3, ..., k-2, k-1) 中的所有数字不相除k

最简单的方法是

def is_prime(k):
    prime = True
    for i in range(2,k):
        if k%i == 0:
            prime = False
            break

    return prime

对此可以进行很多优化,但我现在不会再深入探讨。

4. 把它们放在一起

我在上面遗漏了一个小的边缘案例。如何将一组数字转换为实际数字?这是下面代码的一部分:

def is_prime(k):
    prime = True
    for i in range(2, k):
        if k%i == 0:
            prime = False
            break

    return prime


values = input("Input some comma separated numbers : ")
num = map(int, values.split(","))

permutations = []
for i in range(1, len(num)):
    for t in itertools.permutations(num, i):
        str_num = int("".join(map(str, t)))
        permutations.append(str_num)

answer = []
for i in permutations:
    if is_prime(i):
        answer.append(i)

print(answer)

推荐阅读