Печать списка в наименьшем количестве строк и столбцов - PullRequest
0 голосов
/ 28 февраля 2019

Код для поиска простых чисел:

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)) 

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Вам необходимо выполнить рефакторинг кода для поиска двойных чисел , как показано ниже.

Этот метод возвращает список кортежей двойных простых чисел как, например, [(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
0 голосов
/ 28 февраля 2019
twinPrimes = findTwinPrimes

Это относится к функции findTwinPrimes, но не вызывает ее, потому что в конце нет скобок.

Если вы хотите вызов функции, вам нужны скобки:

twinPrimes = findTwinPrimes(some_argument_here)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...