为什么我尝试检查一个偶数/奇数时会出现“TypeError: not all arguments converted during string formatting”错误?

3

这段代码出现了错误

print('type a whole number:')
n = input()
if n % 2 == 1:
    print('Odd');
else:
    print('Even');

我假设在if语句中有一些特殊的事情要对变量n进行操作吗?我是Python的初学者。


1
Python 2.x 还是 Python 3.x? - pradyunsg
1
@Schoolboy,这肯定是py3.x,因为在py2.x中input()返回一个整数,而错误信息“not all arguments converted during string formatting”明显表明input()在此处返回了一个字符串。 - Ashwini Chaudhary
4个回答

4
以下是解决方法:

以下是解决方法:

n = int(input("type a whole number:"))

因为input()函数返回一个字符串,所以您需要先使用int()函数将其转换为整数。


在Python 2.7中,>>> type(input("type a whole number:")) 的输出为 <type 'int'>,但是 >>> type(raw_input("type a whole number:")) 的输出为 <type 'str'> - kvivek
1
正如@Ashwini所说,在Py 3.x中,input()返回一个字符串。 - Thanakron Tandavas

3

在Python 3.x中,input()返回一个字符串,所以你需要先将n转换为整数。

n = int(input())

0

首先将用户输入的n转换为整数。
即:只需更改:

n = input()

至:

n = int(input())

此外,input()函数可以将字符串作为参数传入,在输入前会先打印该字符串。
因此,你可以更改

的内容。
print('type a whole number:')
n = int(input())

n = int(input('type a whole number:'))

0

问题

用户的输入是一个字符串,而不是整数,无论输入了什么。必须先将其转换为整数,如下所示:

# not this:
# n = input()
# but this:
n = int(input())

详见如何将输入读取为数字?

为什么会出现这个错误信息?

Python允许在左侧使用字符串%。然而,这有一个完全不同的含义:该字符串将被视为“模板”,其他字符串可以替换到其中。模板字符串应该有一个或多个“占位符”,以%开头。有许多可能的变化,但最简单的示例看起来像:

>>> '%s' % 1
'1'
>>> '%s and %s' % (1, 2)
'1 and 2'

(请注意,第一个语法不使用元组;如果只有一个要替换的值且该值是元组,则应将其包装在自己的“单例”元组中。)

由于用户的输入不包含任何有效的占位符, 因此试图评估n%2将尝试将一个值替换到一个没有地方放置它的所谓“模板字符串”中。 Python将其报告为TypeError。可以说这应该是 ValueError (因为问题是模板字符串不包含适当数量的占位符),但是将其称为 TypeError 错误地指出了真正的原因:n应该是整数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接