鱼C论坛

 找回密码
 立即注册
查看: 2815|回复: 9

[已解决]看代码

[复制链接]
发表于 2018-12-1 11:57:30 | 显示全部楼层 |阅读模式

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

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

x
编写一个函数,判断传入的字符串参数是否为“回文联”(回文联即用回文形式写成的对联,既可顺读,也可倒读。例如:上海自来水来自海上)
def palindrome(string):
    length = len(string)
    last = length-1
    length //= 2
    flag = 1
    for each in range(length):
        if string[each] != string[last]:
            flag = 0
        last -= 1

    if flag == 1:
        return 1
    else:
        return 0

string = input('请输入一句话:')
if palindrome(string) == 1:
    print('是回文联!')
else:
    print('不是回文联!')    这个模块中给last赋值的意义在哪里? 以及 for 循环中的 last-1的作用没懂
      

最佳答案
2018-12-1 16:02:07
a2421480 发表于 2018-12-1 15:57
字符串的长度是偶数也不符合啊

7个字符串和6个字符串都是比较前三个啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-12-1 13:21:56 | 显示全部楼层
从for each in range(length):可以看出each是从0开始逐步增加的,而last则是从最后逐步减少的,比如字符串长度是6,则each=0, last = 5,比较第一个和最后一个字符,然后each=1, last=4,比较第二个和倒数第二个。以此类推。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-1 13:59:33 | 显示全部楼层
冬雪雪冬 发表于 2018-12-1 13:21
从for each in range(length):可以看出each是从0开始逐步增加的,而last则是从最后逐步减少的,比如字符串 ...

字符串长度为6 的话,each等于3 大哥
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-1 15:40:24 | 显示全部楼层
本帖最后由 heidern0612 于 2018-12-1 15:43 编辑
a2421480 发表于 2018-12-1 13:59
字符串长度为6 的话,each等于3 大哥


是你自己没弄懂版主说的。

我问你,假定7个字的字符串,你只需要比较几个?

是不是头三个字跟后三个字一样(第一个和最后一个比较,第二个和倒数第二个比较,第三个和倒数第三个比较,第四个空着),就是回文联了?

那字符串比较的范围是不是range(0,3)的索引?(只比较字符串的一半就行)



至于last为什么要减1。

比如你7个字符,你想要索引最后一个字符,是不是第六个索引值?

也就是string[6] 等于 你索引的七个字符?(lengh -1的由来)

for语句下面each比较的,其实也就是string的[0]第一个索引和最后一个索引[6]的比较(假定有七个字符)。

如果你不赋值last,你怎么定位字符串的最后一个索引值?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-1 15:57:15 | 显示全部楼层
heidern0612 发表于 2018-12-1 15:40
是你自己没弄懂版主说的。

我问你,假定7个字的字符串,你只需要比较几个?

字符串的长度是偶数也不符合啊  
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-1 16:02:07 | 显示全部楼层    本楼为最佳答案   
a2421480 发表于 2018-12-1 15:57
字符串的长度是偶数也不符合啊

7个字符串和6个字符串都是比较前三个啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-1 16:04:02 | 显示全部楼层
heidern0612 发表于 2018-12-1 16:02
7个字符串和6个字符串都是比较前三个啊

谢谢老哥了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-1 16:09:55 | 显示全部楼层

这就是length整除2的意义啊。

要不length整除2干啥?

其实不用这个lengh//=2语句也可以实现,就比较全部的范围呗。

实现效果是一样的,你可以试试。

不过这个实现回文联最好的办法是用字符串的倒序实现,比较string 和string[::-1]。

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

使用道具 举报

 楼主| 发表于 2018-12-1 16:13:28 | 显示全部楼层
heidern0612 发表于 2018-12-1 16:09
这就是length整除2的意义啊。

要不length整除2干啥?

字符串的倒序我还没学老铁
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-1 16:14:39 | 显示全部楼层
a2421480 发表于 2018-12-1 16:13
字符串的倒序我还没学老铁

老师没讲,自己私下学,这个就是个简单的切片复制。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-23 03:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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