为什么在函数中的IF语句之后分配局部变量会得到无效语法



我将在Edx上学习麻省理工学院Comp Sci使用Python课程简介。有一个练习告诉我们使用平分搜索和递归来检查字符是否在按字母顺序排列的字符串中。出于某种原因,当我将变量HALF放在If语句之后时,出现了语法错误,而如果我在If语句之前声明它,则不会出现错误。我所能找到的就是不能在If语句中声明局部变量请告诉我或让我访问网站,解释为什么会发生这种情况非常感谢

这是代码:

def isIn(char, aStr):
if len(aStr) <= 1 and char != aStr:
return False
HALF = len(aStr) // 2
elif char == aStr[HALF]:
return True 
elif char < aStr[HALF]:
return isIn(char, aStr[:HALF])
else:
return isIn(char, aStr[HALF:])


print(isIn('a', ''))

您会得到无效语法,因为Python与其他语言不同,它使用空格/tab来跟踪代码块。一个合适的Pythonif语句(带有elif(看起来是这样的:

a = 10
if a == 0:
b = 10
elif a == 1:
b = 100
else:
b = 1000

正如您所期望的,elif在使用之前需要一个if语句。当你打破间距:

a = 10
if a == 0:
b = 10
a = 1
elif a == 1:
b = 100
else:
b = 1000

Python不知道elif a == 1连接到哪里,因此会给您带来语法错误。你的意思可能是:

def isIn(char, aStr):
if len(aStr) <= 1 and char != aStr:
return False
HALF = len(aStr) // 2
# 'if', not 'elif' here.
if char == aStr[HALF]:
return True 
elif char < aStr[HALF]:
return isIn(char, aStr[:HALF])
else:
return isIn(char, aStr[HALF:])


print(isIn('a', ''))

最新更新