0

嘿伙计们,这是我的问题。我编写了将两个素数相加并打印小于或等于 100 甚至是偶数的代码。如何编写它以便数字的每个组合都打印在同一行

像这样

100 = 3 + 97 = 11 + 89

def isPrime(n):
    limit = int(n ** 0.5) +1
    for divisor in range (2, limit):
        if (n % divisor == 0):
            return False
    return True

def main():
    a = 0
    b = 0
    for n in range (4, 101):
        if (n % 2 == 0):
            for a in range (1, n + 1):
                if isPrime(a):
                    for b in range (1, n + 1):
                        if isPrime(b):
                            if n == (a + b):
                                print ( n, "=", a, "+", b)

main() 

有任何想法吗?

我对字符串还不太了解,但我在想我们可以将字符串设置为 n == a + b 以及一些如何在 n == n 打印 a + b 语句或 idk 哈哈的同一行上重复

4

1 回答 1

0

一种方法是在某个集合中累积 a 和 b 对,然后打印包含所有对的行。这是一个示例,其中包含一些解释正在发生的事情和一般 Python 提示的注释:

def main():
    for n in range (4, 101, 2): # range() can have third argument -> step
        accumulator = []
        for a in filter(isPrime, range(1, n + 1)): # filter() is useful if you want to skip some values
            for b in filter(isPrime, range (1, n + 1)):
                if n == (a + b):
                    accumulator.append((a,b)) # We accumulate instead of printing
        str_accumulator = ["{} + {}".format(i[0], i[1]) for i in accumulator]
        joined_accumulator = " = ".join(str_accumulator)
        print("{} = {}".format(n, joined_accumulator))

现在,一些解释:

range(4, 101, 2) - 正如评论中所说,它有一个可选的第三个参数。关于如何在文档中使用范围的一些示例和说明。

filter() - 非常有用的通用迭代器构造函数。您传递一个返回 True/False 的函数、一个集合,然后您收到一个迭代器,该迭代器仅从集合中吐出被该函数接受的那些元素。请参阅文档

str.format - 对我来说,格式是将值粘贴到字符串中的最佳方式。它有很多选择,而且用途广泛。您应该在此处阅读整个文档

str.join - 当你有一个字符串集合,并且你想用它们组成一个字符串时,join 就是你想要的。它比 str + str 操作快得多,而且您不必关心集合中是否有一个或多个元素。请参阅文档

于 2013-07-23T16:12:43.173 回答