CarterZhang 发表于 2020-11-17 14:36:25

回文联求解答

程序如下:
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:52:09

本帖最后由 heidern0612 于 2020-11-17 14:57 编辑

1、你的程序逻辑有问题,把自己逻辑思路理清楚再说。

按照你的逻辑,for循环只判断了一次,就打印了是回文联,这显示是不正确的。


2、题中错误在list1的下标应该是中括号[],不是小括号(),把你的list1后面的小括号都改成中括号试试。


3、假如不想用下标负数的情况(这种是最简单判断回文联的方法),想麻烦或者做的更有趣一点。

可以考虑先len字符串长度,然后算出最大判断值。如字符串长度为5,只需要判断两次是否相符。

初始化一个计数变量,然后用for循环判断,符合就+1,不符合就continue就好。

只要计数变量等于你判断的次数,便是回文联,否则就不是。

逃兵 发表于 2020-11-17 16:45:25

本帖最后由 逃兵 于 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)

CarterZhang 发表于 2020-11-18 08:41:39

逃兵 发表于 2020-11-17 16:45
首先说明你的代码错误,列表切片是使用中括号[]而非小括号
另外打印函数的话会出现None因为函数没有返回值 ...

卧槽,大佬牛逼,你写的第二个我是真佩服!

逃兵 发表于 2020-11-18 08:58:49

CarterZhang 发表于 2020-11-18 08:41
卧槽,大佬牛逼,你写的第二个我是真佩服!

{:10_281:}给个最佳呗

CarterZhang 发表于 2020-11-18 09:00:30

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)

逃兵 发表于 2020-11-18 09:12:14

CarterZhang 发表于 2020-11-18 09:00
感谢大佬!按照大佬第三点说的方法,我写出来啦!非常感谢!请大佬过目!
def huiwenlian(list1):
   ...

计算相同的次数,验证相同的次数是否等于length
{:10_282:}没有错
页: [1]
查看完整版本: 回文联求解答