在同一行上打印不同的值的排列

时间:2013-07-19 03:27:14

标签: python-3.x

嘿,伙计们,这是我的问题。我编写的代码总结了两个素数并打印小于或等于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哈哈

1 个答案:

答案 0 :(得分: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))

现在,一些解释:

范围(4,101,2) - 如评论中所述,它有一个可选的第三个参数。关于如何在documentation中使用范围的一些示例和解释。

filter() - 非常有用的泛型迭代器构造函数。您传递一个返回True / False的函数,一个集合,并且您会收到一个迭代器,该迭代器只会吐出该函数接受的集合中的那些元素。请参阅documentation

str.format - 对我来说,格式是将值粘贴到字符串中的最佳方式。它有PLENTY选项,功能多样。你应该阅读整个documentation here

str.join - 如果你有一个字符串集合,并且想要创建一个字符串,那么join就是你想要的。它比str + str操作快得多,而且你也不必关心集合中是否有一个或多个元素。请参阅documentation