喜欢这样
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哈哈
答案 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。