在python进行字符串格式化期间,保持不转换所有参数

时间:2019-02-25 13:07:29

标签: python arrays python-3.x string list

在第六行中,我一直收到错误消息,但我不确定为什么。一直在说,在格式化字符串期间并非所有值都将被转换。我正在尝试创建一个程序,该程序从一串数字中标识一个唯一的数字。

   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 :(得分:0)

Python的split函数返回一个字符串列表。因此,x循环中的每个for值实际上都是x的数字的字符串表示形式。这意味着您在x上执行的任何算术/数字运算都会失败,因为您无法在字符串上执行数字运算。

只需执行int(x)即可将任何数字String强制转换为int。 (即int("3") % 2 == 1

答案 1 :(得分:0)

该函数似乎应该从输入列表中返回较短的偶数或奇数列表。在.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]