Python 如果串联的组合是素数,则接受用户输入并打印出来
我试图弄清楚,如果连在一起的组合是素数(例如7、17、71),如何使用逗号分隔的数字(例如:1、7)进行用户输入并打印出来 到目前为止,我采取的步骤是: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] 如果我可以像上
#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,谢谢你指出这一点!非常抱歉,因为我还是编程新手