鱼C论坛

 找回密码
 立即注册
查看: 1003|回复: 4

[已解决]新手请教:19课动手练习0请教,谢谢大神解答

[复制链接]
发表于 2018-4-3 22:59:33 | 显示全部楼层 |阅读模式

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

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

x
题目是判断回文联的函数设计,回文联就是第一个字和最后一个字一样,第二个字和倒数第二个字一样,以此类推一直到最中间,对称的位置字都一样。
我把我写的代码和老师的代码比较了一下。(申明真的不是觉得自己比老师强哈,真的是新手,所以请教一下我的感觉是不是对的)
1.老师的代码貌似不管每次比较的结果是否符合,都会比较到最后,最后出来才判断,我的是只要比较出不一样的,就直接退出,从效率上说,我感觉我的是不是能好一点。
2. 老师用的是for循环,我是while,请教一个这两个循环哪个效率更高点啊。

老师代码:
def palindrome(string):
    length = len(string)
    last = length-1
    length //= 2
    flag = 1
    for each in range(length):
        if string[each] != string[last]:
            flag = 0
        last -= 1

    if flag == 1:
        return 1
    else:
        return 0

string = input('请输入一句话:')
if palindrome(string) == 1:
    print('是回文联!')
else:
    print('不是回文联!')



我的代码:
def huiwen(x):
    n=len(x)
    m=n//2
    i=0
    while m-i:
        if x[i] == x[n-i-1]:
            i+=1
        else:
            return("Not a 回文联!")
    return("it is a 回文联")

x=input("Please input a 回文联: ")
print(huiwen(x))
最佳答案
2018-4-3 23:35:34
本帖最后由 a690089735 于 2018-4-6 20:49 编辑

小甲鱼的代码只是参考答案,每人都会有不同的解决方案.能抓住耗子就是好猫.
其实两个代码,我觉得效率差不多,但你的更高效一点
学到后面,老师会讲for其实是一个调用了while和yield的生成器.
不过我更喜欢简明的思路,虽然效率稍低了一些,但是让人一看就懂.
  1. def p(string):
  2.         if string == string[::-1]:
  3.                 print('是回文')
  4.         else:
  5.                 print('不是回文')
  6. p(input('请输入文本:'))
复制代码



三行版

  1. def p(string = input('请输入文本:')):
  2.         if string == string[::-1]:print('是回文')
  3.         else:print('不是回文')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-4-3 23:35:34 | 显示全部楼层    本楼为最佳答案   
本帖最后由 a690089735 于 2018-4-6 20:49 编辑

小甲鱼的代码只是参考答案,每人都会有不同的解决方案.能抓住耗子就是好猫.
其实两个代码,我觉得效率差不多,但你的更高效一点
学到后面,老师会讲for其实是一个调用了while和yield的生成器.
不过我更喜欢简明的思路,虽然效率稍低了一些,但是让人一看就懂.
  1. def p(string):
  2.         if string == string[::-1]:
  3.                 print('是回文')
  4.         else:
  5.                 print('不是回文')
  6. p(input('请输入文本:'))
复制代码



三行版

  1. def p(string = input('请输入文本:')):
  2.         if string == string[::-1]:print('是回文')
  3.         else:print('不是回文')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-4 00:29:04 | 显示全部楼层
a690089735 发表于 2018-4-3 23:35
小甲鱼的代码只是参考答案,每人都会有不同的解决方案.能抓住耗子就是好猫.
其实两个代码,我觉得效率差不多 ...

恩,非常感谢你的回答
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-4 07:50:28 From FishC Mobile | 显示全部楼层
一楼说的对,自己做出来的才是最重要的,别人的代码始终只是一个参考

目前阶段不需要太在意效率问题,先学完基础知识再说
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-4 07:56:49 | 显示全部楼层
  1. str1 = list(input("请输入需要检测是否回文的数据:"))
  2. str2 = reversed(str1)
  3. if str1 == list(str2):
  4.     print("这数据是回文数据!")
  5. else:
  6.     print("不!这不是回文数据")
复制代码


我当时敲出来的....可以参考下~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-10 04:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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