|
发表于 2018-7-12 11:53:04
|
显示全部楼层
本楼为最佳答案
我也是初学者 不知道你能不能看懂:
- def palindrome(string):
- length = len(string)
- print('打印length: %s' % length)
- last = length - 1 # 计算机是二进制计算的,从0 开始 所以要减去1,即 索引值最后一位
- print('打印 last: %s' % last)
- length //= 2
- print('打印 length %s' % length)
- flag = 1 # 定义变量 flag 为1 真 为0 假,留着下面用
- for each in range(length):
- if string[each] != string[last]: # 如果不想等 flag 值为0 不执行下面 if flag == 1 的判断.
- # 其实这里完全可以,比较第一个索引值和最后一个索引值,如果不想等就打印不是回文联,不用挨个判断.
- # 这个的用法是,下面判断完第一个相等再判断第二个是否相等直到判断最后一个.
- print('迭代中打印 每次获取 each: %s' % each)
- print('打印string[each]的结果: %s ' % string[each])
- print('迭代中打印 last 的值: %s' % last)
- print('打印string[last]的结果 %s ' % string[last])
- flag = 0 # 如果 string[each] 和 string[last] 不相等,flag 为假 即 0
- last -= 1 # 第一次循环 last 值为索引值最后一位,减一下次循环就变成索引值倒数第二位
- if flag == 1: # 第一次执行到这里的时候,
- number = 0
- print('加个输出,看下这里是不是每次都执行: %d' % number)
- number += 1
- return 1
- else: # 从打印结果看 这里只是 for 循环结束后才执行一次这里的代码
- num = 10
- print('加个输出,看下这里是不是每次都执行: %d' % num)
- num += 1
- return 0
- string = input('请输入一句话:')
- if palindrome(string) == 1:
- print('是回文联')
- else:
- print('不是回文联')
复制代码
不是回文联的 打印结果如下:
- D:\Pycharm代码\venv\Scripts\python.exe "D:/Pycharm代码/7-12-1 判断是否为回文联.py"
- 请输入一句话:一二三四五六七八九
- 打印length: 9
- 打印 last: 8
- 打印 length 4
- 迭代中打印 每次获取 each: 0
- 打印string[each]的结果: 一
- 迭代中打印 last 的值: 8
- 打印string[last]的结果 九
- 迭代中打印 每次获取 each: 1
- 打印string[each]的结果: 二
- 迭代中打印 last 的值: 7
- 打印string[last]的结果 八
- 迭代中打印 每次获取 each: 2
- 打印string[each]的结果: 三
- 迭代中打印 last 的值: 6
- 打印string[last]的结果 七
- 迭代中打印 每次获取 each: 3
- 打印string[each]的结果: 四
- 迭代中打印 last 的值: 5
- 打印string[last]的结果 六
- 加个输出,看下这里是不是每次都执行: 10
- 不是回文联
复制代码
是回文联的打印结果如下:
D:\Pycharm代码\venv\Scripts\python.exe "D:/Pycharm代码/7-12-1 判断是否为回文联.py"
请输入一句话:上海自来水来自海上
打印length: 9
打印 last: 8
打印 length 4
加个输出,看下这里是不是每次都执行: 0
是回文联
|
|