Peteryo01223 发表于 2020-9-21 14:41:42

一个关于“回文联”的题

题目:
编写一个函数,判断传入的字符串参数是否为“回文联”(回文联即用回文形式写成的对联,既可顺读,也可倒读。例如:上海自来水来自海上)

问:
我写的错在哪里?

input("请输入一个文联:")
a=input
b=len(a)
for each in range :
    if a==a:
      print ("这是一个回文联!")
    else:
      print("这根本不是一个回文联。。。")

请各位按我的思路,具体指点一下。标准答案,我看到FishC已经提供了。

谢谢!

学习型motor 发表于 2020-9-21 16:43:20

a=input("请输入一个文联:")
for each in range(len(a)):
    if a==a:
      print ("这是一个回文联!")
    else:
      print("这根本不是一个回文联。。。")
这个是根据你的思路稍微修改的,但其实你运行之后 你会发现这个代码还有能够改进的地方

Peteryo01223 发表于 2020-9-21 16:54:32

本帖最后由 Peteryo01223 于 2020-9-21 17:22 编辑

多谢。按您的建议,run后,确实可以出结果,只不过会重复打印出 len(a) 次。

后来,我在每个print 下面加了一个 break,貌似就不重复了。但其实只是比较了一次,结果是不完整的。

jackz007 发表于 2020-9-21 16:56:03

本帖最后由 jackz007 于 2020-9-21 16:59 编辑

      最关键的一个问题是,循环比较字符,每次比 2 个字符,那么,需要循环len(a) // 2 次,而非 len(a) 次;次要一点的问题是,是不是回文联,只看最终结果,而不是在循环过程中每次比较都报结果,所以,应该这样改:
f = True
a = input("请输入一个文联:")
for x in range(len(a) // 2):
    if a != a[- x - 1] :
      f = False
      break
if f:
    print ("这是一个回文联!")
else:
    print("这根本不是一个回文联。。。")
    当然,最省事的代码长下面这样:
a = input("请输入一个文联:")
if a == a[::-1]:
    print ("这是一个回文联!")
else:
    print("这根本不是一个回文联。。。")

Peteryo01223 发表于 2020-9-21 17:03:12

if a == a[::-1],这个表达太简洁了!厉害。冒号、负号,的用法,我都咩见过,
页: [1]
查看完整版本: 一个关于“回文联”的题