Задача на Python (ошибка EOF when reading a line) на codewars

Вот код:

a = 2
b = int(input("Enter number: "))
c = []
from collections import Counter

while b/a >= 1:
    while b % a == 0:
        c.append(a)
        b = b / a
    a = a + 1
    
d = Counter(c)
e = ""

for k, v in d.items():
    if v == 1:
        e += f'({k})'
    else:
        e += f'({k}**{v})'

e = str(e)
print(e)

для числа 7775460 должно вывести (2**2)(3**3)(5)(7)(11**2)(17)

Эта программа выполняет разложение простого множителя, через модуль collections функции Counter вычисляет количество одинаковых чисел, следующий блок кода выводит результат в таком виде (2**2)(2**3)...

пишет на сайте 'codewars' какую-то ошибку, но в обычном текстовом редакторе всё работает с любыми числами

вот ошибка

Traceback (most recent call last):
  File "/workspace/default/tests.py", line 2, in <module>
    from solution import prime_factors
  File "/workspace/default/solution.py", line 2, in <module>
    b = int(input("Enter number: "))
            ^^^^^^^^^^^^^^^^^^^^^^^
EOFError: EOF when reading a line

ссылка на задачу: https://www.codewars.com/kata/54d512e62a5e54c96200019e/train/python


Ответы (1 шт):

Автор решения: SwaD

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

Так же результат, надо не выводить в консоль, а возвращать из функции.

Вот ваш код, обернутый в функцию:

from collections import Counter

def prime_factors(b):
    a = 2
    c = []
    

    while b/a >= 1:
        while b % a == 0:
            c.append(a)
            b = b / a
        a = a + 1

    d = Counter(c)
    e = ""

    for k, v in d.items():
        if v == 1:
            e += f'({k})'
        else:
            e += f'({k}**{v})'

    e = str(e)

    return e
→ Ссылка