鱼C论坛

 找回密码
 立即注册
查看: 2865|回复: 11

[技术交流] 第18讲习题代码以及分析

[复制链接]
发表于 2014-7-30 15:21:44 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 mumudontcry 于 2014-8-4 18:41 编辑

第一行喂@小甲鱼 ,第二行开始
题目我还是不说了(免责声明:要先好好看小甲鱼的好不啦,全让我说了,人家干什么去,再说把题目弄过来,小甲鱼的10鱼币就赚不了啦)
惯例,先说说小甲鱼的答案
1、值得一提的是这句语句:
while temp:
            sum = sum + (temp%10) ** 3
            temp = temp // 10

重点就是
while temp:
            temp = temp // 10
这货经常用来把一个整数各位数一位一位取出来
别的没什么好说的,我的代码是:
def sum():
    for i in range(100,1000):
        a = i // 100
        i = i % 100
        b = i // 10
        c = i % 10
        s=a**3 + b**3 + c**3
        if s == 100*a + 10*b + c:
            print(s)

我的偏向于针对具体问题来设计,嗯……这种abc取数的方法也很常用
2第二题,小甲鱼代码好~~~长,这回轮到他对这个具体问题设计了,说两个字符还真的是两个字符,而我的代码巨~~~~短:
def findstr():
    Tstr1 = input("请输入目标字符串:")
    str1 = input("请输入子字符串:")
    print("子字符串在目标字符串中共出现",Tstr1.count(str1),"次")

嘿嘿,利用了字符串自带的函数
一开始我就一直在想,小甲鱼的答案会是什么呢?然后没有想出来,因为我觉得他不可能用接下来我要说的一种方法(相反,我觉得他会用上面的方法,可是我想不出上面的方法要怎么做字符串长度为2的这种具体情况,所以我就不知道他会写什么了),可结果他就是从这种方法简化过来的:
问:假如没有字符串的count或者find函数,那要怎么做?
1、程序还是那个程序!必须的!因为这样才能体现函数的高大上的感觉!!不过Tstr1.count(str1)要改成count(str1,Tstr1)
2、接下来是写count()函数
3、然后是思路:
a、i从头开始找str1[0] == Tstr1的位置i
b、找到时,判断,整个str1是否等于从i开始的Tstr1的字符串片段
具体实现是:
Tstr1 ="abcdefghijk"
str1 ='gh'

for i in range(len(Tstr1)):
#在Tstr1中找到第一个等于str1[0]的位置i
    if str1[0] ==Tstr1:

        for j in range(len(str1)):
#如果字符串str1中有一个字符不等于Tstr1中对应的字符,就退出
            if str1[j] != Tstr1[i+j]:
                break
#如果此时已经循环了str1所有的字符,并且,最后str1最后一个字符也跟Tstr1中对应的字符相等,那么就输出i的位置
#因为不论最后一个字符是不是会相等,第二层循环都会退出,此时要判断是break导致的退出,还是正常退出
        if j == len(str1)-1 and str1[j] == Tstr1[i+j]:
            print(i)


嗯……上面的不是count()函数(你以为我会直接写给你?你太天真了),是find()函数的,count的话,只要在加一个累加器就可以了

而小甲鱼的做法就是,没有那个第二层循环,直接改成两次判断(因为str1长度为2)
嗯嗯,木木又一次完胜小甲鱼,维护了世界的和平

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
点击
当没节操甲鱼遇上傲娇笨笨的木木
查看我的淘帖,喜欢就点“订阅”吧

评分

参与人数 1荣誉 +10 鱼币 +10 贡献 +5 收起 理由
小甲鱼 + 10 + 10 + 5 木木我是越来越喜欢你了,加油!

查看全部评分

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-30 15:41:31 | 显示全部楼层
木木我是越来越喜欢你了,加油,继续“来找茬”!

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

使用道具 举报

 楼主| 发表于 2014-7-30 15:54:25 | 显示全部楼层
小甲鱼 发表于 2014-7-30 15:41
木木我是越来越喜欢你了,加油,继续“来找茬”!

我只是可爱的男孩子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-4 22:31:11 | 显示全部楼层
木木你是怎么想到啊,这么吊,简直不可直视,我怎么不看答案什么都不会、、、、、、,只有看到答案,慢慢想才能读懂答案,别提自己写了,告诉哦 你是怎么学的:huffy:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-4 23:05:59 | 显示全部楼层
sunny989129 发表于 2014-8-4 22:31
木木你是怎么想到啊,这么吊,简直不可直视,我怎么不看答案什么都不会、、、、、、,只有看到答案,慢慢想 ...

- -但愿在我继续之前你没有跟上来吧递归有点难
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-4 23:59:40 | 显示全部楼层
sunny989129 发表于 2014-8-4 22:31
木木你是怎么想到啊,这么吊,简直不可直视,我怎么不看答案什么都不会、、、、、、,只有看到答案,慢慢想 ...

看了书才知道,小甲鱼把10页的内容当成了一行来讲,把python缩减得太多了,等看完视频,我还要自己把书看一遍,比如23,24递归这么高大上的问题,我自己写实在是有点勉强,要讲给你们听,感觉有点误导你们,所以,这两讲内容我打算就直接分析小甲鱼的代码,我自己的就不写出去了:一个小时就憋出一个程序,小甲鱼布置了4题,丧心病狂啊(其实是我太水啦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-5 08:32:37 | 显示全部楼层
mumudontcry 发表于 2014-8-4 23:59
看了书才知道,小甲鱼把10页的内容当成了一行来讲,把python缩减得太多了,等看完视频,我还要自己把书看 ...

你还水???你和小甲鱼一样丧心病狂,,只不过他更甚,我都不会写啊,只能看答案,现在看到答案也就是能看懂你而已。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-5 08:34:24 | 显示全部楼层
mumudontcry 发表于 2014-8-4 23:05
- -但愿在我继续之前你没有跟上来吧递归有点难

我跟不上了。。。决定从头再复习一遍,基础啊硬伤。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-5 09:20:43 From FishC Mobile | 显示全部楼层
加油木木,等着看你更新呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-5 14:35:48 | 显示全部楼层
小甲鱼的二师兄 发表于 2014-8-5 09:20
加油木木,等着看你更新呢

def findstr(str1,str2):
    str1 = input("请输入目标字符串:")
    str2 = input("请输入子字符串:")
    print("子字符串在目标字符串中共出现",str1.count(str2),"次")
findstr(str1,str2)
木木求解释:我这样写怎么不正确。我把它改成下面的程序又可以了
def findstr(str1,str2):
    print("子字符串在目标字符串中共出现",str1.count(str2),"次")
str1 = input("请输入目标字符串:")
str2 = input("请输入子字符串:")
findstr(str1,str2)
我实在不知道怎么回事。。。。。。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-5 15:32:52 | 显示全部楼层
sunny989129 发表于 2014-8-5 14:35
def findstr(str1,str2):
    str1 = input("请输入目标字符串:")
    str2 = input("请输入子字符串 ...

因为函数定义里的str12都是函数的自变量,也就是形参,你第一个程序里下面的findstr(str1,str2)的str12是要传递到函数里的实参,可是你第一个程序里并没有定义这两个实参的值
你把那两个赋值语句放在函数里,它们就是局部变量,跟外面的没有关系,第一个程序完全等价于下面的程序:
def findstr(a,b):
    a = input("请输入目标字符串:")
    b = input("请输入子字符串:")
    print("子字符串在目标字符串中共出现",a.count(b),"次")
findstr(str1,str2)

所以,你知道为什么错了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-5 15:36:34 | 显示全部楼层
sunny989129 发表于 2014-8-5 14:35
def findstr(str1,str2):
    str1 = input("请输入目标字符串:")
    str2 = input("请输入子字符串 ...

而第二个程序完全等价于下面的程序:
def findstr(a,b):
    print("子字符串在目标字符串中共出现",a.count(b),"次")
str1 = input("请输入目标字符串:")
str2 = input("请输入子字符串:")
findstr(str1,str2)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 22:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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