a2421480 发表于 2018-12-1 11:57:30

看代码

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

从for each in range(length):可以看出each是从0开始逐步增加的,而last则是从最后逐步减少的,比如字符串长度是6,则each=0, last = 5,比较第一个和最后一个字符,然后each=1, last=4,比较第二个和倒数第二个。以此类推。

a2421480 发表于 2018-12-1 13:59:33

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

字符串长度为6 的话,each等于3 大哥

heidern0612 发表于 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 等于 你索引的七个字符?(lengh -1的由来)

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

如果你不赋值last,你怎么定位字符串的最后一个索引值?

a2421480 发表于 2018-12-1 15:57:15

heidern0612 发表于 2018-12-1 15:40
是你自己没弄懂版主说的。

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


字符串的长度是偶数也不符合啊

heidern0612 发表于 2018-12-1 16:02:07

a2421480 发表于 2018-12-1 15:57
字符串的长度是偶数也不符合啊

7个字符串和6个字符串都是比较前三个啊

a2421480 发表于 2018-12-1 16:04:02

heidern0612 发表于 2018-12-1 16:02
7个字符串和6个字符串都是比较前三个啊

谢谢老哥了

heidern0612 发表于 2018-12-1 16:09:55

a2421480 发表于 2018-12-1 16:04
谢谢老哥了

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

要不length整除2干啥?

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

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

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

a2421480 发表于 2018-12-1 16:13:28

heidern0612 发表于 2018-12-1 16:09
这就是length整除2的意义啊。

要不length整除2干啥?


字符串的倒序我还没学老铁

heidern0612 发表于 2018-12-1 16:14:39

a2421480 发表于 2018-12-1 16:13
字符串的倒序我还没学老铁

老师没讲,自己私下学,这个就是个简单的切片复制。
页: [1]
查看完整版本: 看代码