【问题标题】:Printing list in least amount of rows and columns以最少的行和列打印列表
【发布时间】:2019-07-21 22:43:02
【问题描述】:

求素数的代码:

def findPrimes(n):

    prime_list = list()
    for number in range(1, n + 1):
        prime = True
        for i in range(2, number):
            if(number % i == 0):
                prime = False
        if prime:
            prime_list.append(number)

    return prime_list

整齐地制作素数列表的代码:

def displayPrimes(number, rows = 50):

    table_list = [[] for _ in range(rows)]
    primes = findPrimes(number)

    for index, item in enumerate(primes):
        row_index = index % rows
        table_list[row_index].append("%6d" % item)

    table_str = "\n".join(["\t".join(i) for i in table_list])

    return table_str
print(displayPrimes(4027))

寻找孪生素数的代码:

def findTwinPrimes(n):
     prime = [True for i in range(n + 2)] 
     p = 2

     while (p * p <= n + 1): 

        # If prime[p] is not changed,  
        # then it is a prime 
        if (prime[p] == True): 

            # Update all multiples of p 
            for i in range(p * 2, n + 2, p): 
                prime[i] = False
        p += 1

    # check twin prime numbers 
    # display the twin prime numbers 
        for p in range(2, n-1): 
            if prime[p] and prime[p + 2]: 
                print("(",p,",", (p + 2), ")" ,end='')

print(findTwinPrimes(4027))  

使孪生素数显示整齐的代码。 问题是它说:

TypeError: 'function' 对象不可迭代

因为我在用于显示素数的代码中有相同的数据,所以这不起作用,它只是整齐地显示列表吗?

def displayTwinPrimes(number, rows = 52):

    table_list = [[] for _ in range(rows)]
    twinPrimes = findTwinPrimes

    for index, item in enumerate(twinPrimes):
        row_index = index % rows
        table_list[row_index].append("%6d" % item)

    table_str = "\n".join(["\t".join(i) for i in table_list])    

    return table_str

print(displayTwinPrimes(4027)) 

【问题讨论】:

  • twinPrimes = findTwinPrimes
  • 它也给了我一个错误,即 func isnt iterable ive never seen this

标签: python function primes


【解决方案1】:
twinPrimes = findTwinPrimes

这个引用的是findTwinPrimes函数,但没有调用它,因为末尾没有括号。

如果你想调用函数,你需要括号:

twinPrimes = findTwinPrimes(some_argument_here)

【讨论】:

  • 知道了,我必须输入 4027 作为参数,现在它仍然没有以一种整齐的方式打印它们,所有括号都排成一行,就像它为了 findPrime 的乐趣而打印出来一样imgur.com/a/lqIZsee
【解决方案2】:

您需要重构查找孪生数的代码,如下所示。

此方法返回 孪生素数元组列表,即[(3,5),(5,7), ...]

def findTwinPrimes(n):
    prime = [True for i in range(n + 2)]
    p = 2
    twin_primes = []
    while (p * p <= n + 1):

        # If prime[p] is not changed,
        # then it is a prime
        if (prime[p] == True):

            # Update all multiples of p
            for i in range(p * 2, n + 2, p):
                prime[i] = False
        p += 1

    # check twin prime numbers
    # display the twin prime numbers
    for p in range(2, n - 1):
        if prime[p] and prime[p + 2]:
            twin_primes.append((p, (p + 2)))
            print("(", p, ",", (p + 2), ")", end='')

    return twin_primes  # this returns twin_primes as list of tuples i.e [(3,5),(5,7), ...]

您还需要翻新您的displayTwinPrimes 方法,如下所示:

def displayTwinPrimes(number, rows = 52):

    table_list = [[] for _ in range(rows)]
    twinPrimes = findTwinPrimes(number)

    for index, item in enumerate(twinPrimes):
        row_index = index % rows
        table_list[row_index].append(item)

    table_str = "\n".join(["\t".join(["(%6d, %6d)" % (p[0],p[1]) for p in i]) for i in table_list])

    return table_str

【讨论】:

  • 有没有办法让数字按最少的列打印?或者决定我想要多少列而不是行?
猜你喜欢
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 2014-08-12
  • 2021-05-10
  • 2023-01-27
  • 2012-10-26
相关资源
最近更新 更多