python - 如果连接的组合是素数,则接受用户输入并打印
问题描述
我试图弄清楚如何获取用户输入的逗号分隔的数字(例如: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
非常感谢您的帮助!
解决方案
所以,我不打算回答这个问题,因为我觉得我留下的评论会让你走上正轨,但是你发布的问题似乎有一些有趣的子问题,那会很有趣(而且希望有用)来解决。
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)
推荐阅读
- python - Pandas - 在字符串中获取列表 df 列名称(例如)
- python - 如何在使用 Keras 训练时打印或导出张量的文件值?
- r - R 中的属性分配如何根据语言语法分解?
- java - 如何使用 Kotlin 将列表转换为地图
- java - 我的查询给出以下错误,Unexpected token WHERE
- cypress - 在 Cypress 中键入转义字符在升级后停止工作
- reactjs - 输入'{孩子:字符串;}' 与类型 'IntrinsicAttributes & IModalProps' 没有共同的属性
- python - OpenCV 4.0 和 AMD 处理器 Python
- c# - 替换字符串中的特定重复字符
- php - 波形没有应有的平滑