为什么会出现语法错误(python数字检查函数)?

为什么会出现语法错误(python数字检查函数)?,python,Python,我用Python编写了这个函数,该函数用于检查是否有任何列表元素是数字,如果是,则返回该列表元素。代码如下: def check_for_number(list): x = 0 print(isinstance(list[x], (int, float)) true_or_false = False for x in range(len(list)-1): if isinstance(list[x], (int, float) == True): true_or_fals

我用Python编写了这个函数,该函数用于检查是否有任何列表元素是数字,如果是,则返回该列表元素。代码如下:

def check_for_number(list):
x = 0
print(isinstance(list[x], (int, float))
true_or_false = False
for x in range(len(list)-1):
    if isinstance(list[x], (int, float) == True):
        true_or_false = True
        num = list[x]
    x += 1
print(true_or_false)
return true_or_false 
return num

每当我尝试运行它时,我都会收到一个语法错误,表示if语句末尾的冒号是一个“意外标记”,if语句最后两行中的每一项都会给出相同的意外标记错误。我检查了压痕,没有发现任何问题,我遗漏了什么?谢谢。

您只需索引函数的代码,并修复
如果isinstance(列表[x],(int,float)=True):
部分并关闭第一个打印语句

def check_for_number(list):
    x = 0
    print(isinstance(list[x], (int, float)))
    true_or_false = False
    for x in range(len(list)-1):
        if isinstance(list[x], (int, float)) == True:
            true_or_false = True
            num = list[x]
        x += 1
    print(true_or_false)

    # Decide what you want to return here
    return true_or_false 
    return num
如果您对改进代码感兴趣,请删除
==True
部分,如注释中所述。根据你的问题,我假设你想返回FAL,如果
true\u或
false
num
,则返回FAL

如果在循环中添加
break
语句,当找到第一个数字时,循环将退出。因此,您的计算机不需要在完整列表中循环,这可以节省一些执行时间

我还希望,您的
x+=1
语句不是您想要做的。用于。。。在范围内…
循环将在每个循环中增加x。这就是为什么
x+=1
会使代码每秒跳过一个列表元素。您也不需要先声明x

def check_for_number(list):
    print(isinstance(list[x], (int, float)))
    true_or_false = False
    for x in range(len(list)-1):
        if isinstance(list[x], (int, float)):
            true_or_false = True
            num = list[x]
            break
    print(true_or_false)

    if (true_or_false):
        return num
    else:
        return False

有关不必要的
==True
部分的问题:

if语句的工作方式与下面的伪代码类似

if (CONDITION) == True then do something special
因此,如果添加一个
==True
,python会这样检查它:

if (valeu == True) == True then do something special
这与:

if (value) == True then do something special

Python对标签敏感,不能容忍这方面的错误。我还在第6行看到一个不匹配括号的实例。尝试以下操作,您可能会得到一个关于下一步修复内容的更多信息错误:

def check_for_number(list): 
    x = 0 
    print(isinstance(list[x], (int, float))
    true_or_false = False 
    for x in range(len(list)-1):
        if isinstance(list[x], (int, float) == True): # missing a parenthesis to close isinstance. 
        # "== True" is unnecessary because isinstance() will resolve to True or False
            true_or_false = True 
            num = list[x]
            x += 1 
            print(true_or_false) 
            return true_or_false 
    return num # this will result in unexpected behavior...
        # ...because num will not be defined if this line is reached.
        # Either the return inside the if will finish the method or num will never be defined.
这有点模棱两可,有些应该缩进,因为我不知道你想做什么


如果您试图返回值,请考虑返回一个列表或包含值的字典。

这是一个使用列表理解的解决方案。它根据
Number
抽象基类检查每个元素。它将返回一个数字列表,因为可能有多个数字元素

import numbers

def get_numbers(l):
    return [x for x in l if isinstance(x, numbers.Number)]
例如:

>>> l = ['1', 4.0, 'abc', 'XYZ', 'test', 5]
>>> nums = get_numbers(l)
>>> print(nums)
[4.0, 5]

==True
是不必要的。摆脱它。你在第一次打印的末尾缺少一个右括号。而且,你不能在已经返回后返回,因此你只能返回
true\u或\u false
,这应该有一个更具描述性的属性name@JosephYoung谢谢但是,即使完全删除了print语句,我仍然会得到相同的语法错误。@cricket\u 007为什么==True是不必要的?我想可能是这样的情况,一个函数只能返回一个值,谢谢你清理它。
==True
不符合,而是使用
is True
或者什么都不符合!非常感谢!关于优化it的提示非常受欢迎。我很好奇为什么==真可以省略?因为我认为if语句不会以其他方式执行。干杯if语句将检查条件是否为真。如果条件为True,则将执行If后面的块中的代码。否则,执行将在该块之后继续。有关更多说明,请参阅我的下一个答案更新。
if(true\u或false):return num
似乎冗长。。。只需
returnnum
@user215465非常感谢!你的解释真的很有帮助,我也很感谢你指出x+=1语句的用法。你说得对,那不是我想做的哈哈。为伟大的建议干杯。:)可能不应该在范围循环中
x+=1
,除非您想跳过elementsThanks以获取帮助。这是我为已设置的任务编写的代码的一部分,该任务的规则之一是不能使用外部库。python标准库是否会被排除在该规则之外?我想知道我是否可以像数字一样导入模块?我想是的。。。因为标准库不是一个外部(第三方)库。@IH96这是,这里没有任何东西是外部的,这可能是更好的解决方案,因为它是所有的数字,而不仅仅是第一个找到的数字