Задача на 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 шт):
Ваш код необходимо обернуть в функцию 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