|
发表于 2017-9-23 15:14:14
|
显示全部楼层
本帖最后由 流浪1123 于 2017-9-23 15:46 编辑
首先是语法问题:
错误:
Traceback (most recent call last):
File "D:/learning/python/019/回文联函数.py", line 16, in <module>
if hwlhs(string) == 1:
File "D:/learning/python/019/回文联函数.py", line 7, in hwlhs
if list[each] == list[last]:
TypeError: 'type' object is not subscriptable
- if list[each] == list[last]:
复制代码
这一句有问题
你可以这样写:
- if string[each] == string[last]:
复制代码
或
- if list(string[each]) == list(string[last]):
复制代码
因为这里的list()是方法。
TypeError就是指类型错误,你需要转换为同一个类型。进行对项目进行比较的!
然后再看来语意错误!
在排查出了语法错误之后:
这个是运行的结果:
请输入字符串abcdefg
7 = 7
6 = 7 -1
3 //= 2
flag = 0
for 0 in range(0, 3) =====开始进入循环============
5 -= 1
flag = 0
for 1 in range(0, 3) =====开始进入循环============
4 -= 1
flag = 0
for 2 in range(0, 3) =====开始进入循环============
3 -= 1
flag = 0
else:
这不是回文联
>>> ================================ RESTART ================================
>>>
请输入字符串abcdef
6 = 6
5 = 6 -1
3 //= 2
flag = 0
for 0 in range(0, 3) =====开始进入循环============
4 -= 1
flag = 0
for 1 in range(0, 3) =====开始进入循环============
3 -= 1
flag = 0
for 2 in range(0, 3) =====开始进入循环============
2 -= 1
flag = 0
else:
这不是回文联
综合上述输入部分和flag = 0来看,没有进入
- if list(string[each]) == list(string[last]):
复制代码
这一句中,string[last]为一个定值。
当输入abcdefg为7而string[each]的取值范围在[0,3).所以这一句不对。
当输入abcdef为6而string[each]的取值范围在[0,3).所以这一句不对。
应该改成
- if list(string[each]) == list(string[last - each]):
复制代码
改变以后的代码运行结果:
请输入字符串abcdefg
7 = 7
6 = 7 -1
3 //= 2
flag = 0
for 0 in range(0, 3) =====开始进入循环============
5 -= 1
flag = 0
for 1 in range(0, 3) =====开始进入循环============
4 -= 1
flag = 0
for 2 in range(0, 3) =====开始进入循环============
if ['c'] == ['c'] :
1 = 1
3 -= 1
flag = 1
if 1 == 1
这是回文联
>>> ================================ RESTART ================================
>>>
请输入字符串abcdef
6 = 6
5 = 6 -1
3 //= 2
flag = 0
for 0 in range(0, 3) =====开始进入循环============
4 -= 1
flag = 0
for 1 in range(0, 3) =====开始进入循环============
3 -= 1
flag = 0
for 2 in range(0, 3) =====开始进入循环============
2 -= 1
flag = 0
else:
这不是回文联
结果正确
全部代码如下:
- def hwlhs(string):
- length = len(string)
- last = length - 1
- length//=2
- flag = 0
- for each in range(length):
- if list(string[each]) == list(string[last - each]):
- flag = 1
- last -= 1
- if flag == 1:
- return 1
- else:
- return 0
- string = input('请输入字符串')
- if hwlhs(string) == 1:
- print('这是回文联')
- else:
- print('这不是回文联')
复制代码 |
|