为什么会出现语法错误(python数字检查函数)?
我用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
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这是,这里没有任何东西是外部的,这可能是更好的解决方案,因为它是所有的数字,而不仅仅是第一个找到的数字