|
发表于 2020-7-15 11:37:34
|
显示全部楼层
本楼为最佳答案
本帖最后由 Twilight6 于 2020-7-15 11:40 编辑
看注释吧:
- def palindrome(string): # 定义判断回文联函数,设置传入参数为 string
- length = len(string) # 获取字符串总长度,作为 for 循环过程的索引最大范围
- last = length-1 # 总字符串长度减少1,表示的就是最后一个字符的位置参数即 -1
- length //= 2 # 因为每次要相互比较第一个字符和倒序第一个字符是否相同所以只需要比较总长度的一半次数即可
- flag = 1 # 用于判断是否是回文联的标志,默认设置为 1 即默认是回文联,在 for 循环判断过程中若符合 if 条件那么 flag = 0 则不是回文脸
- for each in range(length):
- if string[each] != string[last]: # 循环判断首尾字符是否相等
- flag = 0 # 若不相等,说明不是回文脸,将 flag = 0
- last -= 1 # 每次循环都要向前一位 , 因为 last 是从最后一个位置参数开始
- if flag == 1: # 这里就是判断是否为回文脸了,看 flag 的值
- return 1 # 是就返回 1
- else:
- return 0 # 反之不是回文脸返回 0
- string = input('请输入一句话:')
- if palindrome(string) == 1: # 判断函数返回 1 还是 0 , 1 就是回文脸 0 就不是回文脸
- print('是回文联!')
- else:
- print('不是回文联!')
复制代码
其实可以安装甲鱼哥的思路化简下的:
- def palindrome(string): # 定义判断回文联函数,设置传入参数为 string
- length = len(string) # 获取字符串总长度,作为 for 循环过程的索引最大范围
- last = length-1 # 总字符串长度减少1,表示的就是最后一个字符的位置参数即 -1
- length //= 2 # 因为每次要相互比较第一个字符和倒序第一个字符是否相同所以只需要比较总长度的一半次数即可
- for each in range(length):
- if string[each] != string[last]: # 循环判断首尾字符是否相等
- return '不是回文联!' # 有个对应位置字符不相等,所以就不是回文联
- last -= 1 # 每次循环都要向前一位 , 因为 last 是从最后一个位置参数开始
- return '是回文联!' # 全部 for 循环完毕说明没有符合 if 条件一次过,那么就是回文联
- string = input('请输入一句话:')
- print(palindrome(string))
复制代码
另一个思路,用列表切片颠倒:
- def palindrome(string):
- if string==string[::-1]:return '是回文联'
- return '不是回文联'
- string = input('请输入一句话:')
- print(palindrome(string))
复制代码
|
|