鱼C论坛

 找回密码
 立即注册
查看: 3043|回复: 8

又是我来了。关于回文数的,请指出我代码中的问题。并根据思路加以修正。

[复制链接]
发表于 2017-2-9 00:56:44 | 显示全部楼层 |阅读模式
15鱼币
  1. def hui():
  2.     temp = input("请输入一句话:")
  3.     list = [c for c in temp]
  4.     lenth = len(list)
  5.     count = int(lenth // 2)
  6.     while  count > 0:
  7.         for x in range(lenth):
  8.             a = list[x]
  9.             b = list.reverse[x]
  10.             if a != b:
  11.                 print("这不是一个回文数")
  12.             elif a ==b:
  13.                 count +=1
  14.                 return print("这是一个回文数")
  15.                
复制代码


每指处一个问题+3鱼币
给出我这种方法思路的正确代码获得15鱼币
加以评判以及指出易错点的再+10鱼币

最佳答案

查看完整内容

你的这个解答思路,应该是,先把字符串从中间截开,然后依次把第1个字符与最后一个字符对比,第2个字符和倒数第2字符对比。。。直到到达最中间的字符, 如果其中,有任何一组对比不相等,则判断为不是回文。 下面是本人对该程序的修正参考: 本人觉得,虽然上面的程序是可以实现这个功能,但从逻辑实现上来说,比较复杂,也不好理解,容易出错的地方主要有: 1)没有正确设置循环条件,容易出现死循环问题,像楼主之前的 ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-2-9 00:56:45 | 显示全部楼层
你的这个解答思路,应该是,先把字符串从中间截开,然后依次把第1个字符与最后一个字符对比,第2个字符和倒数第2字符对比。。。直到到达最中间的字符,
如果其中,有任何一组对比不相等,则判断为不是回文。

下面是本人对该程序的修正参考:
  1. def hui():
  2.     temp = input("请输入一句话:")
  3.     list = [c for c in temp]        # 把temp的值使用列表推导式赋值给变量list
  4.     lenth = len(list)               # 获取变量list的长度
  5.     count = int(lenth // 2)         # 获取中间的长度值

  6.     while count > 0:                # 根据列表中间长度来循环
  7.         for x in range(count):      # 对整个变量list的一半值从下标0开始,一直循环到中间的值
  8.             a = list[x]             # 把list列表中第x个元素赋值给a
  9.             b = list[lenth - x -1]  # 通过下标相减,从结尾向前循环,赋值给b
  10.             if a != b:              # 如果a和b不相同,说明不是回文,直接退出整个函数
  11.                 print("这不是一个回文数")
  12.                 return
  13.             elif a == b:            # 若a和b相等,则继续下一次对比,直到所有对比完成
  14.                 count -= 1          # 对比一次后,count数量减1,用于退出while循环
  15.     print("这是一个回文数")           # 当退出while循环,说明所有的对比都是相同的,所以就是回文
  16.     return
复制代码


本人觉得,虽然上面的程序是可以实现这个功能,但从逻辑实现上来说,比较复杂,也不好理解,容易出错的地方主要有:
1)没有正确设置循环条件,容易出现死循环问题,像楼主之前的代码,count += 1,那就是死循环;
2)判断是否为回文的条件,容易出错,而楼主的程序,只是判断了第一个字符和最后一个字符,相等就认为是回文,那就不对了。
3) 在对列表进行反转时,需要注意操作完后,其返回的对象;另外,若是想使有反转方法,对列表进行反转,那大可不必再挨个元素进行对比了,直接两个列表对比会更方便;
4)既然是截断了列表中间,则在对比时,不用对整个列表进行循环,像上面的x下标,只需要循环一半即可,这样会减少一半的操作;
5)在使用变量命名时,list为python中的关键字,最好还是不要用做变量名使用。
上面就是本人觉得需要注意的地方,欢迎指正交流。

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
vincenzo0823 + 5 + 5 + 3 感谢楼主无私奉献!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-2-9 00:58:48 | 显示全部楼层
204101wn8nvw26bu2inr2u.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-2-9 10:22:07 | 显示全部楼层
本帖最后由 小茗同学 于 2017-2-9 10:30 编辑
  1. def hui():
  2.         temp = input("请输入一句话:")
  3.         list1 = [c for c in temp]
  4.         lenth = len(list1)
  5.         
  6.         a = list1
  7.         b = reversed(a)
  8.         if a != list(b):
  9.                 print("这不是一个回文数")
  10.         else:
  11.                 print("这是一个回文数")
  12.                
复制代码
1.list本身就是一个一个韩式,所以赋值的时候应该使用
list1 = [c for c in temp]
2.只有有个if的时候只需要使用else就可以了不需要使用elif

评分

参与人数 1荣誉 +4 鱼币 +4 贡献 +3 收起 理由
vincenzo0823 + 4 + 4 + 3 非常赞,这个公式更加简单了。

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-2-9 10:34:24 | 显示全部楼层
list最好不要作为变量名
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-2-9 10:37:17 | 显示全部楼层
如果是python2的话,temp = raw_input("请输入一句话:")
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-2-9 10:41:06 | 显示全部楼层
冯1张 发表于 2017-2-9 10:34
list最好不要作为变量名

b = list.reverse[x],list会变的无效
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-2-9 14:35:42 | 显示全部楼层
冯1张 发表于 2017-2-9 10:41
b = list.reverse[x],list会变的无效

list做变量名,之后如果想要使用list函数,则会被覆盖掉
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-2-9 14:39:31 | 显示全部楼层
琅玡 发表于 2017-2-9 00:56
你的这个解答思路,应该是,先把字符串从中间截开,然后依次把第1个字符与最后一个字符对比,第2个字符和倒 ...

非常感谢!今日上限了,明日追加。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-25 08:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表