鱼C论坛

 找回密码
 立即注册
查看: 5199|回复: 39

[技术交流] Python:每日一题 40

[复制链接]
发表于 2017-5-6 23:33:44 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 ooxx7788 于 2017-5-7 13:13 编辑

这题算明天的。星期天来点简单的。
春天到了,树上的小鸟总是叫个不停。
男生叫起来'Ha',女生叫起来'ha',男生一句女生一句但是一句随便叫几声。
好了,现在请你根据叫声,算出有几只小鸟。
给出一个函数:def kooka_counter(laughing),返回小鸟的数量。
例如:HaHaHahahaHaHa  分段为:   男 HaHaHa  女 haha   男  HaHa,所以这是3只。返回是3。

给出测试代码,test.py请去33,34题中下载。
  1. test.assert_equals(kooka_counter(""), 0)
  2. test.assert_equals(kooka_counter("hahahahaha"), 1)
  3. test.assert_equals(kooka_counter("hahahahahaHaHaHa"), 2)
  4. test.assert_equals(kooka_counter("HaHaHahahaHaHa"), 3)
  5. test.assert_equals(kooka_counter("hahahahahahahaHaHa"), 2)
复制代码



游客,如果您要查看本帖隐藏内容请回复

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2017-5-7 00:47:18 | 显示全部楼层
本帖最后由 2012277033 于 2017-5-7 00:50 编辑
  1. def kooka_counter(laughing):
  2.     import re
  3.     return len(re.split('(?:Ha)+',laughing))+len(re.split('(?:ha)+',laughing))-2
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-7 09:16:24 | 显示全部楼层
用字符串方法写一个
  1. def kooka_counter(laughing):
  2.     count = 0
  3.     while laughing != '':
  4.         pref = 'ha' if laughing[:2] == 'ha' else 'Ha'
  5.         laughing = laughing.lstrip(pref)
  6.         count += 1
  7.     return count
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-5-7 16:03:53 | 显示全部楼层
冬雪雪冬 发表于 2017-5-7 09:16
用字符串方法写一个

第四行写的太烂了。改为:
  1. pref = laughing[:2]
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-8 09:43:19 | 显示全部楼层
急啊急啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-8 09:45:43 | 显示全部楼层

急什么呢?急着看答案啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-8 13:23:56 | 显示全部楼层
666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-10 11:00:33 | 显示全部楼层
我这是作弊了么。。。
  1. def xn(s='HahahahaHa'):
  2.     c=s.replace('a','')
  3.     sw,sl=0,0
  4.     for i in c:
  5.         if i!=sw:
  6.             sl+=1
  7.             sw=i
  8.     return sl
  9. print(xn("HaHaHahahaHaHa"))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-10 11:01:58 | 显示全部楼层
原来楼主也是把a剔除了先。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-10 11:11:51 | 显示全部楼层
余欲渔 发表于 2017-5-10 11:01
原来楼主也是把a剔除了先。。。

我们俩的这个有点点像。不过还是你的简单点点。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-10 11:40:39 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-30 18:09:11 | 显示全部楼层
这道题明明答过了,回帖不见了··· ···
应该就是问你字符串“Ha”首字母发生了几次大小写变化+1
  1. def kooka_counter(s):
  2.     string = s.replace("a","")
  3.     num = 0 # 变化次数
  4.     for i in range(len(string)-1):
  5.         if string[i] != string[i+1]:
  6.             num += 1  
  7.     return 0 if len(s)==0 else num+1 # 空字符串的情况
复制代码

试下用字符串的 find 方法递归计算数值
  1. def kooka_counter2(s):
  2.     if len(s) == 0:
  3.         return ""
  4.     else:
  5.         counter = {"Ha":0, "ha":0}
  6.         word = ["Ha","ha"]
  7.         i = word.index(s[:2])
  8.         
  9.         def kc(s, i):
  10.             num = s.find(word[i])
  11.             if num == -1:
  12.                 return sum(counter.values())
  13.             else:
  14.                 counter[word[i]] += 1
  15.                 return kc(s[num:],(i+1)%2)
  16.     return kc(s,i)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-30 18:10:52 | 显示全部楼层
solomonxian 发表于 2017-6-30 18:09
这道题明明答过了,回帖不见了··· ···
应该就是问你字符串“Ha”首字母发生了几次大小写变化+1

因为论坛回档了,所以不用觉得自己穿越了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-6 16:38:43 | 显示全部楼层
def fun(temp):
    m=0
    s=0
    n=0
    temp=temp.replace('a','')
    if 'H' not in temp or 'h' not in temp:
        return 1
    for i in temp:
        if i=='H':
            m+=1
        if m>=3 and s==1:
            n+=1
            m=0
        if i=='h':
            s+=1
        if s>=2 and m==1:
            n+=1
            s=0
    if m>1:
        n+=1
    return n

if __name__=='__main__':
    print(fun('HaHaHahahaHaHa'))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-28 19:15:03 | 显示全部楼层
终于看到我会的了,只要统计Ha与ha的间隔然后+1,就是总体数字啦~~~
相当于6段有5个间隔。

def kooka_counter(laughing):
    return (laughing.count('Haha')+laughing.count('haHa')+1)

l="hahahahahaHaHaHaHaHaHahahaHaHaHaHaHahahaHaHa"
print(kooka_counter(l))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-28 23:00:41 | 显示全部楼层
编程新血 发表于 2017-11-28 19:15
终于看到我会的了,只要统计Ha与ha的间隔然后+1,就是总体数字啦~~~
相当于6段有5个间隔。

应该不会那么惨吧,前面还是有很多题目都是比较简单的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-21 22:48:48 | 显示全部楼层
  1. import itertools
  2. print(len([x for x in itertools.groupby('hahahahahahahaHaHa'.replace('a',''))]))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-22 12:41:44 | 显示全部楼层
我只想坦诚的说两个字:不会
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-15 19:37:24 | 显示全部楼层
def kooka_counter(laugh):
    a = laugh.split('a')
    count = 0

    for i in range(len(a)-1):
        if a[i] == a[i+1]:
            count = count
        else:
            count += 1
    return count

n = raw_input('shuru: ')

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

使用道具 举报

发表于 2018-3-29 12:21:43 | 显示全部楼层
  1. def kooka_counter(laughing):
  2.     counter = 0
  3.     while laughing:
  4.         a = laughing[:2]
  5.         laughing = laughing.lstrip(a)
  6.         counter += 1
  7.     return counter
  8. lst = ['', 'hahahahaha', 'hahahahahaHaHaHa', 'HaHaHahahaHaHa', 'hahahahahahahaHaHa']
  9. for i in lst:
  10.     print(kooka_counter(i))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 00:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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