Python 如果串联的组合是素数,则接受用户输入并打印出来

Python 如果串联的组合是素数,则接受用户输入并打印出来,python,Python,我试图弄清楚,如果连在一起的组合是素数(例如7、17、71),如何使用逗号分隔的数字(例如:1、7)进行用户输入并打印出来 到目前为止,我采取的步骤是: #convert user input into a list values = input("Input some comma separated numbers : ") num = values.split(",") 但我不知道以后该怎么做,才能以列表的形式列出它们的所有组合,如: num_组合=[1,7,17,71] 如果我可以像上

我试图弄清楚,如果连在一起的组合是素数(例如7、17、71),如何使用逗号分隔的数字(例如:1、7)进行用户输入并打印出来

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

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

num = values.split(",")
但我不知道以后该怎么做,才能以列表的形式列出它们的所有组合,如: num_组合=[1,7,17,71]

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

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

非常感谢你的帮助

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

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(['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.把它们放在一起 上面我遗漏了一个小的edge案例。如何将数字元组转换为实际数字?这是下面代码的部分功能:

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)

还要检查一下,您的条件
i>1和i%i==0
对检测素数不起作用。事实上,所有数字都是如此。你需要在这里设置的条件是i>1,所有小于i的数字都不除以i,谢谢你指出这一点!非常抱歉,因为我还是编程新手