- A+
大部分代码来源于小甲鱼社区,如需要提问,请搜索小甲鱼社区,或在下文中访问相关链接。
所谓回文联:
天连碧水碧连天
洞帘水挂水帘洞
山果花开花果山
脸映桃红桃映脸
海上飞燕飞上海
江内行船行内江
河边赛车赛边河
列表倒叙判断
代码分析,从上面的一些回文联中发现了一些现象,第一个字与最后一个字相同,第二个字与最后第二个字相同,这种思路下答案会是:
- def judge():
- n = input('please enter a string :')
- if n == n[::-1]:
- for i in n[::-1]:
- print(i)
- print('yes')
- else:
- print('no')
- judge()
原文链接:
其实一开始有一个问题,把我难住了,就是n == n[::-1]在我的理解里面它只会判断第一个与最后一个,但是后面使用for循环将其一个一个打印出来后,才发现它判断了每一个字符,在此感谢群里(528770819)茶晓的点拨。
使用list和翻转的功能进行对比:
- def fun(hwl):
- list1=list(hwl)
- list2=reversed(list1) #后期更新如果您测试了这个不妨list2=list(reversed(list1))
- print(list1,list(list2))
- if list1==list(list2):
- return 'yes'
- else:
- return 'no'
- print (fun(input('请输入您要判读的回文联:')))
请注意这是错误的,原文链接:http://bbs.fishc.com/thread-84863-1-1.html,
Python3 官方文档这样介绍 reverse()方法语法:list.reverse() 该方法没有返回值,但是会对列表的元素进行反向排序。
你第四行代码 list2 = list1.resverse() 中 list2 没有得到值,自然和有值的list1不对等,所以最后结果得到的是NO 。
但是还没完,这个标签还是可以用,只是用的方法超过了19课的课程,就当作提前预习了。
- def fun1(str1):
- str2 = ''.join(reversed(str1))
- print(str1,list(str1))
- print(str2,list(str2))
- if str2 == str1:
- return 'yes'
- else:
- return 'no'
- print(fun1(input('输入要判断的回文联:')))
join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串,''.join(reversed(str1)) ,用空区分,就是啥玩意也没有,反转str1的内容,进行内容的判断。
缩写(三元操作符):
- def fun1(str1):
- return 'yes' if str1 == ''.join(reversed(str1)) else 'no'
通过数字的叠加来判断回文链接
- def huiwenlian(string):
- length=len(string)
- count=length//2
- flag=0
- for i in range(count):
- if string[i]==string[length-1-i]:
- flag += 1
- print(string[i],string[length-1-i],flag) #后加的一行,因为一直没看懂
- if flag== count:
- print('是回文联')
- else:
- print('不是回文联')
- stringset=input('请输入:')
- huiwenlian(stringset)
原文链接:http://bbs.fishc.com/thread-67989-1-1.html
其实一开始没看懂,计算长度,怎么去对比,后来去打印string[i]==string[length-1-i],才明白过来,这里还有个绕脑筋的,就是python是从零开始记位,而后面是从-1开始的,所以就是后面多了一个-1这个运算。
- 请输入:天连碧水水碧连天
- 8 4
- 天 天 1
- 连 连 2
- 碧 碧 3
- 水 水 4
- 是回文联
通过递归判断
- def is_palindrome(n, start, end):
- if start > end:
- return 1
- else:
- return is_palindrome(n, start+1, end-1) if n[start] == n[end] else 0
- string = input('请输入一串字符串:')
- length = len(string)-1
- if is_palindrome(string, 0, length):
- print('\"%s\"是回文字符串!' % string)
- else:
- print('\"%s\"不是回文字符串!' % string)
逻辑与上面的相差不多,注意辨别string,与start,被这个给混淆了。
原文链接:http://bbs.fishc.com/thread-69131-1-1.html