检查函数返回值时出现Python TypeError

检查函数返回值时出现Python TypeError,python,Python,我对python非常陌生。在if语句中计算函数时遇到问题。这里有一些非常简单的代码: import sys number = sys.argv def is_even(n): if n%2==0: return true else: return false if is_even(number): print "The number is even" else: print "The number is not even" 当我

我对python非常陌生。在if语句中计算函数时遇到问题。这里有一些非常简单的代码:

import sys
number = sys.argv
def is_even(n):
    if n%2==0:
        return true
    else:
        return false

if is_even(number):
    print "The number is even"
else:
    print "The number is not even"
当我尝试运行代码时,我得到:

TypeError: unsupported operand type(s) for %: 'list' and 'int'
不知道这里发生了什么。有人能给我一些指示我可能做错了什么吗?

sys.argv是一个字符串列表,其中第一个元素是脚本路径本身,之后的元素是在命令行中传递给程序的参数。如果您想在命令行中传入数字并在程序中使用它,您应该使用-

number = int(sys.argv[1])
此外,如果希望它是整数,则应将其转换为int

解释-

python <script.py> arg1
           ^         ^ 
  sys.argv[0] sys.arv[1] ... 
sys.argv是字符串列表,其中第一个元素是脚本路径本身,之后的元素是在命令行中传递给程序的参数。如果您想在命令行中传入数字并在程序中使用它,您应该使用-

number = int(sys.argv[1])
此外,如果希望它是整数,则应将其转换为int

解释-

python <script.py> arg1
           ^         ^ 
  sys.argv[0] sys.arv[1] ... 
sys.argv是字符串列表。第一个字符串是脚本的名称,因此您需要将第二个字符串转换为int

sys.argv是字符串列表。第一个字符串是脚本的名称,因此您需要将第二个字符串转换为int

您已将数字传递给函数,是传递给Python脚本的命令行参数列表,其第一项是脚本名称,其余参数是传递给脚本的自定义参数,因此在本例中,您需要传递数字[1]的整数如果在命令行中传递了一个参数,则返回函数

sys.argv

传递给Python脚本的命令行参数列表。argv[0]是脚本名,它取决于操作系统是否为完整路径名。如果命令是使用解释器的-c命令行选项执行的,则argv[0]被设置为字符串'-c'。如果没有向Python解释器传递脚本名称,则argv[0]是空字符串

因此,您可以简单地执行以下操作:

import sys
number = int(sys.argv[1])

def is_even(n):
    if n%2==0:
        return true
    return false
并不是说,如果要在命令行中传递多个参数,则需要从第二个索引到末尾获取项:

numbers = map(int,sys.argv[1:])
您已将数字传递给函数,是传递给Python脚本的命令行参数列表,其第一项是脚本名称,其余参数是传递给脚本的自定义参数,因此在本例中,您需要传递数字[1]的整数如果在命令行中传递了一个参数,则返回函数

sys.argv

传递给Python脚本的命令行参数列表。argv[0]是脚本名,它取决于操作系统是否为完整路径名。如果命令是使用解释器的-c命令行选项执行的,则argv[0]被设置为字符串'-c'。如果没有向Python解释器传递脚本名称,则argv[0]是空字符串

因此,您可以简单地执行以下操作:

import sys
number = int(sys.argv[1])

def is_even(n):
    if n%2==0:
        return true
    return false
并不是说,如果要在命令行中传递多个参数,则需要从第二个索引到末尾获取项:

numbers = map(int,sys.argv[1:])
调用sys.argv时,它将返回一个列表,其中第一个元素是脚本名,其余元素将是用户传递的输入

修改:

输出:

调用sys.argv时,它将返回一个列表,其中第一个元素是脚本名,其余元素将是用户传递的输入

修改:

输出:


我认为您必须更改代码中的一行

number = int(sys.argv[1])

然后它就会工作。

我认为您必须更改代码中的一行

number = int(sys.argv[1])

然后它就会工作。

您正在传递一个listnumber是一个列表,因为sys.argv是函数的列表。请尝试像is_evennumber[1]那样索引。sys.argv属于列表类型,即使您只传递一个参数,您正在传递一个listnumber是一个列表,因为sys.argv是函数的列表。请尝试像is_evennumber[1]那样索引.sys.argv属于列表类型,即使您只传递一个参数,但不完全传递;如果你这样做,你会得到TypeError:不是所有的参数在字符串格式化过程中都被转换,这可能会让人很困惑:P.你需要将它转换成一个int。实际上,你的右边应该是number=intsys.argv[1],不完全是;如果你这样做,你会得到TypeError:不是所有的参数在字符串格式化过程中都会被转换,这可能会让人很困惑:P.你需要将它转换为int。实际上你的右边应该是number=intsys.argv[1]啊,谢谢!我不知道argv是这样工作的。谢谢谢谢你!我不知道argv是这样工作的。谢谢