回文联求解答
程序如下:def huiwenlian(list1):
length = len(list1)
if length%2 != 0:
for each in range(length-1):
if list1(each) == list1(length-1-each):
print("回文联")
else:
print("不是回文联")
else:
for each in range(length-1):
if list1(each) == list1(length-1-each) and each != length/2:
print("回文联")
else:
print("不是回文联")
list1 = input("input a sentence: ")
print(huiwenlian(list1))
运行之后报错如下:
Traceback (most recent call last):
File "F:/Programming/Python/practice/20.0回文联.py", line 16, in <module>
print(huiwenlian(list1))
File "F:/Programming/Python/practice/20.0回文联.py", line 5, in huiwenlian
if list1(each) == list1(length-1-each):
TypeError: 'str' object is not callable
请问大佬哪里出了问题?该怎么改? 本帖最后由 heidern0612 于 2020-11-17 14:57 编辑
1、你的程序逻辑有问题,把自己逻辑思路理清楚再说。
按照你的逻辑,for循环只判断了一次,就打印了是回文联,这显示是不正确的。
2、题中错误在list1的下标应该是中括号[],不是小括号(),把你的list1后面的小括号都改成中括号试试。
3、假如不想用下标负数的情况(这种是最简单判断回文联的方法),想麻烦或者做的更有趣一点。
可以考虑先len字符串长度,然后算出最大判断值。如字符串长度为5,只需要判断两次是否相符。
初始化一个计数变量,然后用for循环判断,符合就+1,不符合就continue就好。
只要计数变量等于你判断的次数,便是回文联,否则就不是。 本帖最后由 逃兵 于 2020-11-17 16:49 编辑
首先说明你的代码错误,列表切片是使用中括号[]而非小括号
另外打印函数的话会出现None因为函数没有返回值,所以只需要调用函数就可以,不需要打印
先写个偷懒版
def huiwenlian(list1):
if list1 == list1[::-1]:
print('回文联')
else:
print('不是回文联')
list1 = input("input a sentence: ")
huiwenlian(list1)
根据你的逻辑分析
1.先判断列表个数是奇数还是偶数
2.再判断第一个字是否和最后一个字相同,第二个字和倒数第二个字是否相同以此类推
3.如果都相同,那么它是回文联
在这里我们修改一下逻辑
去掉第1条,不需要判断奇数偶数
保留第2条,判断第一个字是否和最后一个字相同,第二个字和倒数第二个字是否相同以此类推
修改第3条,如果出现任意一次不相同时,不是回文联,否则为回文联
修改后的代码:
def huiwenlian(list1):
a = 0
length = len(list1)
for each in range(length-1):
if list1 != list1:
a=1
break
if a == 0:
print('是回文联')
else:
print('不是回文联')
list1 = input("input a sentence: ")
huiwenlian(list1)
逃兵 发表于 2020-11-17 16:45
首先说明你的代码错误,列表切片是使用中括号[]而非小括号
另外打印函数的话会出现None因为函数没有返回值 ...
卧槽,大佬牛逼,你写的第二个我是真佩服! CarterZhang 发表于 2020-11-18 08:41
卧槽,大佬牛逼,你写的第二个我是真佩服!
{:10_281:}给个最佳呗 heidern0612 发表于 2020-11-17 14:52
1、你的程序逻辑有问题,把自己逻辑思路理清楚再说。
按照你的逻辑,for循环只判断了一次,就打印了是回 ...
感谢大佬!按照大佬第三点说的方法,我写出来啦!非常感谢!请大佬过目!
def huiwenlian(list1):
length_1 = len(list1)
length = length_1//2
a = 0
for each in range(length):
if list1 == list1:
a += 1
else:
continue
if a == length:
print("回文联")
else:
print("不是回文联")
list1 = input("请输入一句话:")
huiwenlian(list1)
CarterZhang 发表于 2020-11-18 09:00
感谢大佬!按照大佬第三点说的方法,我写出来啦!非常感谢!请大佬过目!
def huiwenlian(list1):
...
计算相同的次数,验证相同的次数是否等于length
{:10_282:}没有错
页:
[1]