鱼C论坛

 找回密码
 立即注册
查看: 814|回复: 13

[已解决]关于第19讲回文联问题

[复制链接]
发表于 2018-11-15 15:53:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目如下:

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



小甲鱼答案如下:

  1. def palindrome(string):
  2.     list1 = list(string)
  3.     list2 = reversed(list1)
  4.     if list1 == list(list2):
  5.         return '是回文联!'
  6.     else:
  7.         return '不是回文联!'
  8. print(palindrome('上海自来水来自海上'))
复制代码


我想通过元素的顺序判断一个一个比对来做, 我的答案是这样的:

  1. def sen(sentence):
  2.     sen(input('请输入一句话:'))
  3.     length = len(sentence)
  4.     i = 0
  5.     while i<(length-1-i) :
  6.         if sentence[length-1-i] != sentence[i]:
  7.             return 0
  8.         else :
  9.             i += 1
  10. if sen == 0:
  11.     print('不是回文联')
  12. else:   
  13.     print('是回文联')
复制代码



结果执行后,不管输入什么,都显示“是回文联”,不是已经返回了0值吗,怎么判断不了“不是回文联”的情况呢?
最佳答案
2018-11-15 16:08:28
因为你的代码还没有带入东西就直接开始运行了我在你的代码上做了一些改动应该可以了,主要就是要让函数能够运行才能判断是否是回文联。
  1. def sen(sentence):
  2.     length = len(sentence)
  3.     i = 0
  4.     while i<(length-1-i) :
  5.         if sentence[length-1-i] != sentence[i]:
  6.             return 0
  7.         else :
  8.             i += 1

  9. sentence = input('请输入一句话:')
  10. m = sen(sentence)

  11. if m == 0:
  12.     print('不是回文联')
  13. else:   
  14.     print('是回文联')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-11-15 15:56:59 | 显示全部楼层
你这个函数定义的好乱啊,本身就是自己调用自己,
而且你这个函数没运行
不知道你拿什么去判断得0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-15 15:59:40 | 显示全部楼层
你贴出来的代码,这里边函数名称叫sen
sen(input('请输入一句话:')) 这句什么情况?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-15 16:01:53 | 显示全部楼层
你既然判断过程定义在函数中了,就把input语句放在main过程中,这样比较清晰,不容易混淆。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-15 16:02:42 | 显示全部楼层
塔利班 发表于 2018-11-15 15:56
你这个函数定义的好乱啊,本身就是自己调用自己,
而且你这个函数没运行
不知道你拿什么去判断得0

只要这个语句成立,即前后元素不一致,不就return 0 了吗,

我改成这样:

  1. def sen(sentence):
  2.     length = len(sentence)
  3.     i = 0
  4.     while i<(length-1-i) :
  5.         if sentence[length-1-i]!= sentence[i]:
  6.             return 0
  7.         else :
  8.             i += 1
  9. if sen == 0:
  10.     print('不是回文联')
  11. else:   
  12.     print('是回文联')
  13. print(sen('1234567'))
复制代码


输出结果是这样的:

>>>
是回文联
0
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-15 16:06:28 | 显示全部楼层
喜欢吃菠菜 发表于 2018-11-15 15:59
你贴出来的代码,这里边函数名称叫sen
sen(input('请输入一句话:')) 这句什么情况?

我是想调用函数来着,结果好像应该在函数外面调用函数才对,后面把调用改到了外面也不对。输出结果是:

>>>
是回文联
0
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-15 16:07:22 | 显示全部楼层
不做其他改动,你的代码调整一下,应该可以了,你参考一下:
  1. def sen(sentence):
  2.         length = len(sentence)
  3.         i = 0
  4.         while i<(length-1-i) :
  5.             if sentence[length-1-i] != sentence[i]:
  6.                 return 0
  7.             i += 1      
  8. if __name__=='__main__':
  9.     sentence=input('请输入一句话:')
  10.     if sen(sentence) == 0:
  11.         print('不是回文联')
  12.     else:   
  13.         print('是回文联')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-15 16:08:13 | 显示全部楼层
你运行在后边,你先判断,首先就是要进else
感觉你函数那里还不太明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-15 16:08:28 | 显示全部楼层    本楼为最佳答案   
因为你的代码还没有带入东西就直接开始运行了我在你的代码上做了一些改动应该可以了,主要就是要让函数能够运行才能判断是否是回文联。
  1. def sen(sentence):
  2.     length = len(sentence)
  3.     i = 0
  4.     while i<(length-1-i) :
  5.         if sentence[length-1-i] != sentence[i]:
  6.             return 0
  7.         else :
  8.             i += 1

  9. sentence = input('请输入一句话:')
  10. m = sen(sentence)

  11. if m == 0:
  12.     print('不是回文联')
  13. else:   
  14.     print('是回文联')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-15 16:15:35 | 显示全部楼层
喜欢吃菠菜 发表于 2018-11-15 16:07
不做其他改动,你的代码调整一下,应该可以了,你参考一下:

嗯嗯,这样的确能运行成功,我改成这样:

  1. def sen(sentence):
  2.     length = len(sentence)
  3.     i = 0
  4.     while i<(length-1-i) :
  5.         if sentence[length-1-i]!= sentence[i]:
  6.             return 0
  7.         i += 1
  8. sentence=input('请输入一句话:')
  9. if sen(sentence) == 0:
  10.     print('不是回文联')
  11. else:   
  12.     print('是回文联')
复制代码


就是少了这句:

  1. if __name__=='__main__':
复制代码


我没看懂这句代码的意思,看上去好抽象,然后好像没有也没啥影响。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-15 16:18:10 | 显示全部楼层
本帖最后由 喜欢吃菠菜 于 2018-11-15 16:20 编辑
AtticusWang 发表于 2018-11-15 16:15
嗯嗯,这样的确能运行成功,我改成这样:


呵呵,这句话的作用是,你在编辑器中编辑的时候,可以把这个放sen函数的文件当成一个模块调用,main的语句不会影响模块。
你如果在idle中运行,当然不用这句

你以后的学习就知道了,慢慢来吧。
你这个问题能顺利理解,就ok了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-15 16:23:18 | 显示全部楼层
喜欢吃菠菜 发表于 2018-11-15 16:18
呵呵,这句话的作用是,你在编辑器中编辑的时候,可以把这个放sen函数的文件当成一个模块调用,main的 ...

所噶,原来如此
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-15 16:24:32 | 显示全部楼层
塔利班 发表于 2018-11-15 16:08
你运行在后边,你先判断,首先就是要进else
感觉你函数那里还不太明白

我if从句判断怎么会首先进else呢?应该先判断if语句呀,函数那里确实还有点不懂。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-11-15 16:26:00 | 显示全部楼层
Thomason 发表于 2018-11-15 16:08
因为你的代码还没有带入东西就直接开始运行了我在你的代码上做了一些改动应该可以了,主要就是要让函数能够 ...

嗯嗯,我运行了之后发现的确如此,谢啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-23 15:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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