2
#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 len(string)>=2 and string[0]==string[-1]:除了第一个函数和 if string[0]==string[-1] and len(string)>=2:第二个函数中的 if 条件外,我找不到代码中的差异

4

1 回答 1

6

首先,您首先检查是否有足够的字符进行测试,然后您没有:

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 文档中的布尔表达式:

表达式x and y首先计算x; 如果x为假,则返回其值;否则,y评估并返回结果值。

于 2013-01-25T09:08:30.847 回答