鱼C论坛

 找回密码
 立即注册
查看: 889|回复: 7

[已解决]19讲课后作业中判断回文联

[复制链接]
发表于 2018-12-8 17:53:33 | 显示全部楼层 |阅读模式

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

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

x
小甲鱼给的答案如下
  1. def palindrome(string):
  2.     list1 = list(string)
  3.     list2 = reversed(list1)
  4.     if list1 == list(list2):
  5.         return '是回文联!'
  6.     else:
  7.         return '不是回文联!'
  8. print(palindrome('上海自来水来自海上'))
复制代码

但是我的思路是直接用字符串比较不可以吗?也就是将list换成str。但最终结果显示为不是回文联。请指导,谢谢。
最佳答案
2018-12-8 20:19:13
单行道007 发表于 2018-12-8 18:00
两个都换,直接用==比较不可以吗
大概是这样


你这个错误在于,reversed()会生成一个reversed object,可以用list()列表,tuple()元组,set()集合显示出结果,但是用str()还是一个reversed object,所以那个if肯定成不了,永远都是else的结果,如果你想用字符串的话2楼的写法你可以参考
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-8 17:56:49 | 显示全部楼层
2个list不知道你换了那几个
字符串判断if string==string[::-1]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2018-12-8 18:00:25 | 显示全部楼层
塔利班 发表于 2018-12-8 17:56
2个list不知道你换了那几个
字符串判断if string==string[::-1]

两个都换,直接用==比较不可以吗
  1. def palindrome(string):
  2.     str1= str(string)
  3.     str2= reversed(str1)
  4.     if str1== str(str2):
  5.         return '是回文联!'
  6.     else:
  7.         return '不是回文联!'
  8. print(palindrome('上海自来水来自海上'))
复制代码

大概是这样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-8 18:19:28 | 显示全部楼层
你打印下str(str2)就行了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-8 20:10:44 | 显示全部楼层
本帖最后由 前路 于 2018-12-8 20:13 编辑

楼主你好,
首先小甲鱼老师的思路是:
1.用list1来装转换成列表的字符串( list(string) ),
2.用list2来装翻转后的字符串( reversed(list1) ),
3.比较list1 与 list2,但是由于list1是列表,而list2不是列表,所以两个不能直接用 == 来做判断比较,因此需要将list2转换成list类型再比较即 if list1 == list(list2)
而你的思路我大概猜想是这样:
不用去将str转成list,而是直接用原字串与翻转后的字串进行 == 判断!
那我们来简单测试一下:
  1. >>> a = "abcba"
  2. >>> b = reversed(a)
  3. >>> c = reversed(list(a))
  4. >>> d = list(reversed(list(a)))
  5. >>> print(a,b,c,d,sep="\n")
  6. abcba
  7. <reversed object at 0x03098F70>
  8. <list_reverseiterator object at 0x035D9130>
  9. ['a', 'b', 'c', 'b', 'a']
复制代码

其实不难看到,当我们翻转字串后,返回的一个地址类型,所以你懂得!
要想比较那就得用地址内容比较,因此转换为list是为了避免reversed()的影响!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-12-8 20:19:13 | 显示全部楼层    本楼为最佳答案   
单行道007 发表于 2018-12-8 18:00
两个都换,直接用==比较不可以吗
大概是这样


你这个错误在于,reversed()会生成一个reversed object,可以用list()列表,tuple()元组,set()集合显示出结果,但是用str()还是一个reversed object,所以那个if肯定成不了,永远都是else的结果,如果你想用字符串的话2楼的写法你可以参考
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-8 20:46:14 | 显示全部楼层
本帖最后由 13572044595 于 2018-12-8 20:55 编辑
  1. def palindrome(string):
  2.     if string == string[::-1]:
  3.         return '是回文联!'
  4.     else:
  5.         return '不是回文联!'
  6. print(palindrome('上海自来水来自海上'))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-13 15:30:29 | 显示全部楼层
前路 发表于 2018-12-8 20:10
楼主你好,
首先小甲鱼老师的思路是:
1.用list1来装转换成列表的字符串( list(string) ),

非常感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-15 10:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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