所有函数只检查一个元素

2024-05-19 06:47:42 发布

您现在位置:Python中文网/ 问答频道 /正文


counter = 0
numList = []
beginning = 1
primeOrNot = False
number = int(input("Type a number to check if it's prime."))
while True:
  if number == 2:
    primeOrNot = True
  elif "2" in str(number) or "4" in str(number) or "6" in str(number) or "8" in str(number) or "0" in str(number) or number == 1:
    primeOrNot = False

  numList = [''.join(p) for p in permutations(str(number))]
  for p in range(0, len(numList)): 
    numList[p] = int(numList[p])
  for u in range(2, number):
    if all(o % u == 0 for o in numList):
      counter = counter + 1
  if counter == 0:
    print(numList)
  break

我试图使它打印出一个素数,如果所有的数字排列也是素数。 我已经试着用all做过了,但它所做的是检查列表中是否至少有1个元素符合o % u = 0。我想让它检查所有元素是否都工作,而不是一个元素是否工作。我能用all或其他方法做什么

现在的输出示例:

输入:12

输出:无,12和21都不是素数

输入:35

输出:35, 53

虽然35不是质数,但它会打印,因为53是质数


Tags: orinfalsetrue元素numberforif
1条回答
网友
1楼 · 发布于 2024-05-19 06:47:42

你的逻辑是错误的:

for u in range(2, number):
    if all(o % u == 0 for o in numList):
        counter = counter + 1

对于该范围内的每个潜在除数,检查该除数是否进入输入的每个排列中。你认为u的什么值将同时除以35和53

首先,您需要将其设置为any,而不是all。 其次,我强烈建议您查找如何查找素数和/或因子数。您可以学习更好的处理方法,尤其是当您的输入字符串较长时

另外,请注意,输入中的05也将确保某些排列是复合的;假设输入至少是两位数字,它必须完全由1379位组成

if number in [2, 3, 5, 7]:
    print("number is prime")
    exit(0)
if any (d not in "1379" for d in str(number)):
    print("This input has composite permutations")

相关问题 更多 >

    热门问题