hero533 发表于 2020-11-17 09:20:46

关于19讲动动手第0题的reverse问题

我又又又又遇到问题了{:10_266:} {:10_266:} {:10_266:}



def huilianwen(string):
    list1 = list(string)
    list2 = list1[:]
    list3 = list1.reverse()
    if list2 == list3:
      return '是回联文'
    else:
      return '不是回联文'

print(huilianwen('上海自来水来自海上'))         
                                                                     结果为不是回联文          。
                                                                                  {:10_254:} {:10_254:} {:10_254:} 有懂的大哥可以帮忙分析一下吗                              

suchocolate 发表于 2020-11-17 09:25:51

本帖最后由 suchocolate 于 2020-11-17 09:29 编辑

list的reverse()不返回内容,而是直接改变原列表,所以list3什么也没有。
按下面写,不用倒转,直接判断。
def ckhw(strs):
    if strs == strs[::-1]:
      return '是回联文'
    else:
      return '不是回联文'

print(ckhw('上海自来水来自海上'))

hero533 发表于 2020-11-17 09:34:14

suchocolate 发表于 2020-11-17 09:25
list的reverse()不返回内容,而是直接改变原列表,所以list3什么也没有。
按下面写,不用倒转,直接判断。 ...

def huilianwen(string):
    list1 = list(string)
    list2 = list1[:]
   
    if list2 == list1.reverse():
      return '是回连文'
    else:
      return '不是回连文'

print(huilianwen('上海自来水来自海上'))      
                                                                        这样结果还是不是回连文


def huilianwen(string):
    list1 = list(string)
    list2 = list1[:]
    list1.reverse()
    if list2 == list1:
      return '是回连文'
    else:
      return '不是回连文'

print(huilianwen('上海自来水来自海上'))

但是这样就对了,为什么list2 == list1.reverse()这样还是不可以

suchocolate 发表于 2020-11-17 09:45:23

hero533 发表于 2020-11-17 09:34
这样结果还是不是 ...

list的reverse()不返回内容

hero533 发表于 2020-11-17 09:53:01

suchocolate 发表于 2020-11-17 09:45
list的reverse()不返回内容

好的,谢谢大哥,新知识get{:10_298:}

suchocolate 发表于 2020-11-17 10:02:12

hero533 发表于 2020-11-17 09:53
好的,谢谢大哥,新知识get

python自带的reversed()函数可以返回,但返回的是迭代器,不适合做回文判断,所以还是用[::-1]这种直接。
ls1 =
ls2 = reversed(ls1)
print(type(ls2))
print(ls2)
for i in ls2:
    print(i)

Twilight6 发表于 2020-11-17 13:02:31

hero533 发表于 2020-11-17 09:34
这样结果还是不是 ...

Python 的列表绝大多数方法是在原列表上进行改变且没有返回值

例如reverse()、 extend()、append()、remove() 等没有返回值,但是 pop() 函数有返回值哈

当 Python 的函数或者方法没有返回值时候, Python 会默认返回一个None

所以这里list1.reverse() 返回的是一个 None ,而 list2 =list1.reverse() 即 list2 = None 条件永不成立

hero533 发表于 2020-11-18 09:16:10

Twilight6 发表于 2020-11-17 13:02
Python 的列表绝大多数方法是在原列表上进行改变且没有返回值

例如reverse()、 extend()、append() ...

{:10_297:} 谢谢,记住了
页: [1]
查看完整版本: 关于19讲动动手第0题的reverse问题