鱼C论坛

 找回密码
 立即注册
查看: 3780|回复: 20

[已解决]回文联问题

[复制链接]
发表于 2017-3-28 20:18:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#/usr/bin/python
#!-*-coding:utf-8-*-
def fun(hwl):
    list1=list(hwl)
    list2=list1.reverse()
    if list1==list2:
        return 'yes'
    else:
        return 'no'
print fun('是是是是是是')


这段代码的运行结果为什么会是no
运行上海自来水来自海上也是否
哪里出了问题请赐教
最佳答案
2017-3-29 22:28:37
本帖最后由 莫希 于 2017-3-29 22:34 编辑

Python3 官方文档这样介绍   reverse()方法语法:list.reverse()   该方法没有返回值,但是会对列表的元素进行反向排序。

你第五行代码 list2 = list1.resverse() 中   list2 没有得到值,自然和有值的list1不对等,所以最后结果得到的是NO 。

数据反转操作最简单的方法,用切片, list2 = list1[::-1]  其余代码不变,即可得到你想要的效果  。


  1. def fun(hwl):
  2.     list1 = list(hwl)
  3.     list2 = list1[::-1]

  4.     if list1 == list2:
  5.         return 'yes'
  6.     else:
  7.         return 'no'

  8. print(fun('abcc4ba'))

复制代码



list1[::-1]  可以这样理解,返回一个   从list1列表中的最后一项开始,至第一项结束的新列表。

比如 list1[3, 8, 9, 10]  那么 list1[::-1] 返回的新列表为 [10, 9, 8, 3], list1[::-2] 返回的新列表为[9, 8, 3]  具体 list切片用法,可参考Python相关文档
       

评分

参与人数 1荣誉 +1 收起 理由
zhaoxudong2004 + 1 01.def fun(hwl):

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-28 21:09:23 | 显示全部楼层
  1. def fun(hwl):
  2.     list1=list(hwl)
  3.     list2=reversed(list1)
  4.     if list1==list(list2):
  5.         return 'yes'
  6.     else:
  7.         return 'no'
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-28 21:19:22 | 显示全部楼层
  1. list1.reverse()
复制代码

这个函数是把list1翻转后的列表又存在了list1中,并且没有把翻转后的值给到list2中

你可以在命令行里面试一下,这两个的输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-28 21:41:45 | 显示全部楼层
python2会出现汉字编码问题,换成python3运行一下就可以了。而且原函数的第二行list2写的不对,做如下修改:
def fun(hwl):
    list1=list(hwl)
    list2=list(reversed(list1))
    if list1==list2:
        return 'yes'
    else:
        return 'no'
   
print(fun('是是是是是是'))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-28 22:05:20 | 显示全部楼层
你可以试试它这个每个list都是什么含义
  1. def fun(hwl):
  2.     list1=list(hwl)
  3.     print(list1)
  4.    
  5.     list2=reversed(list1)
  6.     print(list2)
  7.    
  8.     if list1==list(list2):
  9.         return 'yes'
  10.     else:
  11.         return 'no'
  12. print(fun("123"))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-28 22:06:01 | 显示全部楼层
怎么粘图片啊,想写更明白一点,占个图片尼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-28 23:42:50 | 显示全部楼层
可以不用转换为列表,程序更简单。
  1. def fun1(str1):
  2.     str2 = ''.join(reversed(str1))
  3.     if str2 == str1:
  4.         return 'yes'
  5.     else:
  6.         return 'no'
复制代码

进一步简化为:
  1. def fun1(str1):
  2.     return 'yes' if str1 == ''.join(reversed(str1)) else 'no'
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-29 02:57:10 From FishC Mobile | 显示全部楼层
其实连函数都不用,直接当字符串处理
print ('上海自来水来自海上'[::-1])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-29 18:52:35 | 显示全部楼层
冬雪雪冬 发表于 2017-3-28 23:42
可以不用转换为列表,程序更简单。

进一步简化为:

还是不行哎,当输入回文联的时候不是应该返回yes吗?但是返回的还是no
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-29 18:53:09 | 显示全部楼层
问题还没解决请指教呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-29 20:18:37 | 显示全部楼层
翻转是reversed(),list2 = reversed(list1) 然后判断语句里改成list1 == list(list2)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-29 20:52:51 | 显示全部楼层
进击的小蜗牛 发表于 2017-3-29 20:18
翻转是reversed(),list2 = reversed(list1) 然后判断语句里改成list1 == list(list2)

def fun(hwl):
    list1=list(hwl)
    list2=reversed(list1)
    if list1==list(list2):
        return 'yes'
    else:
        return 'no'
print fun('是是是是是是')

都改了 输出还是no?????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-29 21:20:42 | 显示全部楼层
看图,我这运行是正常的 print()括号不能少
QQ图片20170329211925.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-29 22:28:37 | 显示全部楼层    本楼为最佳答案   
本帖最后由 莫希 于 2017-3-29 22:34 编辑

Python3 官方文档这样介绍   reverse()方法语法:list.reverse()   该方法没有返回值,但是会对列表的元素进行反向排序。

你第五行代码 list2 = list1.resverse() 中   list2 没有得到值,自然和有值的list1不对等,所以最后结果得到的是NO 。

数据反转操作最简单的方法,用切片, list2 = list1[::-1]  其余代码不变,即可得到你想要的效果  。


  1. def fun(hwl):
  2.     list1 = list(hwl)
  3.     list2 = list1[::-1]

  4.     if list1 == list2:
  5.         return 'yes'
  6.     else:
  7.         return 'no'

  8. print(fun('abcc4ba'))

复制代码



list1[::-1]  可以这样理解,返回一个   从list1列表中的最后一项开始,至第一项结束的新列表。

比如 list1[3, 8, 9, 10]  那么 list1[::-1] 返回的新列表为 [10, 9, 8, 3], list1[::-2] 返回的新列表为[9, 8, 3]  具体 list切片用法,可参考Python相关文档
       
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-29 22:57:35 | 显示全部楼层
ZYM111 发表于 2017-3-29 18:52
还是不行哎,当输入回文联的时候不是应该返回yes吗?但是返回的还是no

我又验证了,没有问题。你把你的测试的回文发上来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-29 23:50:37 | 显示全部楼层
冬雪雪冬 发表于 2017-3-28 23:42
可以不用转换为列表,程序更简单。

进一步简化为:

2.7版本,用这个会乱码?反向之后
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-29 23:51:37 | 显示全部楼层
1
QQ图片20170329235114.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-30 00:04:27 | 显示全部楼层
你别说话我烦 发表于 2017-3-29 23:50
2.7版本,用这个会乱码?反向之后

我试了一下,的确如此,这是因为python3把每个汉字当成一个字符,而python2把每个汉字作为三个字符,颠倒后就乱了。
1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-30 18:31:27 | 显示全部楼层
莫希 发表于 2017-3-29 22:28
Python3 官方文档这样介绍   reverse()方法语法:list.reverse()   该方法没有返回值,但是会对列表的元素 ...

谢谢谢谢!可算解决了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-31 20:37:07 | 显示全部楼层
ZYM111 发表于 2017-3-30 18:31
谢谢谢谢!可算解决了!

不客气,解决了就好,选择为 【最佳答案】呗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-5 05:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表