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