看代码
编写一个函数,判断传入的字符串参数是否为“回文联”(回文联即用回文形式写成的对联,既可顺读,也可倒读。例如:上海自来水来自海上)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的作用没懂
从for each in range(length):可以看出each是从0开始逐步增加的,而last则是从最后逐步减少的,比如字符串长度是6,则each=0, last = 5,比较第一个和最后一个字符,然后each=1, last=4,比较第二个和倒数第二个。以此类推。 冬雪雪冬 发表于 2018-12-1 13:21
从for each in range(length):可以看出each是从0开始逐步增加的,而last则是从最后逐步减少的,比如字符串 ...
字符串长度为6 的话,each等于3 大哥 本帖最后由 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,你怎么定位字符串的最后一个索引值? heidern0612 发表于 2018-12-1 15:40
是你自己没弄懂版主说的。
我问你,假定7个字的字符串,你只需要比较几个?
字符串的长度是偶数也不符合啊 a2421480 发表于 2018-12-1 15:57
字符串的长度是偶数也不符合啊
7个字符串和6个字符串都是比较前三个啊 heidern0612 发表于 2018-12-1 16:02
7个字符串和6个字符串都是比较前三个啊
谢谢老哥了 a2421480 发表于 2018-12-1 16:04
谢谢老哥了
这就是length整除2的意义啊。
要不length整除2干啥?
其实不用这个lengh//=2语句也可以实现,就比较全部的范围呗。
实现效果是一样的,你可以试试。
不过这个实现回文联最好的办法是用字符串的倒序实现,比较string 和string[::-1]。
heidern0612 发表于 2018-12-1 16:09
这就是length整除2的意义啊。
要不length整除2干啥?
字符串的倒序我还没学老铁 a2421480 发表于 2018-12-1 16:13
字符串的倒序我还没学老铁
老师没讲,自己私下学,这个就是个简单的切片复制。
页:
[1]