Продолжайте получать не все аргументы, преобразованные во время форматирования строки в Python - PullRequest
0 голосов
/ 25 февраля 2019

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

   def iq_test(numbers):
        oddlist = []
        evenlist = []
        numbers = numbers.split()
        for x in numbers:
            if x % 2 == 0:
                evenlist.append(x)
            if x % 2 != 0:
                oddlist.append(x)
        if len(evenlist) > len(oddlist):
            return "".join(oddlist)
        else:
            return "".join(evenlist)

Ответы [ 2 ]

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

Похоже, эта функция должна возвращать более короткий список четных или нечетных чисел из списка ввода.После вашего .split() результатом будет список строк, поэтому математика в основном делает это:

>>> "1" % 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting

Вот исправление:

def iq_test(numbers):
        oddlist = []
        evenlist = []

        # Splitting the input strings returns a list of strings.
        # Use a list comprehension to convert them to integers.
        numbers = [int(x) for x in numbers.split()]

        for x in numbers:
            if x % 2 == 0:
                evenlist.append(x)
            else: # Can just use an else here
                oddlist.append(x)
        if len(evenlist) > len(oddlist):
            return oddlist # No need for the join now
        else:
            return evenlist # No need for join.

data = input('Numbers? ')
result = iq_test(data)
print(result)

Вывод:

Numbers? 1 2 3 4 5
[2, 4]
0 голосов
/ 25 февраля 2019

Функция Python split возвращает список строк.Таким образом, каждое значение x в вашем цикле for на самом деле является строковым представлением любого числа x.Это означает, что любая арифметическая / числовая операция, которую вы выполняете на x, завершится неудачей, потому что вы не можете выполнять числовые операции над строкой.

Просто выполните int(x), чтобы привести любую числовую строку к int.(т.е. int("3") % 2 == 1)

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