#i couldnt find the difference in the code
>>> def match_ends(words):
# +++your code here+++
count=0
for string in words:
if len(string)>=2 and string[0]==string[-1]:
count=count+1
return count
>>> match_ends(['', 'x', 'xy', 'xyx', 'xx'])
2
>>>
>>> def match_ends(words):
# +++your code here+++
count=0
for string in words:
if string[0]==string[-1] and len(string)>=2:
count=count+1
return count
>>> match_ends(['', 'x', 'xy', 'xyx', 'xx'])
Traceback (most recent call last):
File "<pyshell#26>", line 1, in <module>
match_ends(['', 'x', 'xy', 'xyx', 'xx'])
File "<pyshell#25>", line 5, in match_ends
if string[0]==string[-1] and len(string)>=2:
IndexError: string index out of range
除了第一个函数中的if条件if len(string)>=2 and string[0]==string[-1]:
和第二个函数中的if string[0]==string[-1] and len(string)>=2:
之外,我找不到代码中的差异
答案 0 :(得分:5)
在第一个中,首先要检查是否有足够的字符进行测试,在第二个中你没有:
if len(string)>=2 and string[0]==string[-1]:
和
if string[0]==string[-1] and len(string)>=2:
并传入空字符串:
match_ends(['', 'x', 'xy', 'xyx', 'xx'])
空字符串的长度为0,索引0处没有字符:
>>> len('')
0
>>> ''[0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
if
布尔表达式从左到右进行求值,string[0]==string[-1]
表达式在len(string)>=2
测试之前计算,然后对该空字符串失败。
在另一个版本中,首先评估len(string)>=2
部分,发现空字符串为False
(0不大于或等于2),然后Python不需要查看在and
表达式的另一半,根本不存在and
表达式将成为True
,无论后半部分的计算结果如何。
请参阅python文档中的Boolean expressions:
表达式
x and y
首先评估x
;如果x
为false,则返回其值;否则,将评估y
并返回结果值。