ooxx7788 发表于 2017-5-6 23:33:44

Python:每日一题 40

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

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

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


**** Hidden Message *****

2012277033 发表于 2017-5-7 00:47:18

本帖最后由 2012277033 于 2017-5-7 00:50 编辑

def kooka_counter(laughing):
    import re
    return len(re.split('(?:Ha)+',laughing))+len(re.split('(?:ha)+',laughing))-2

冬雪雪冬 发表于 2017-5-7 09:16:24

用字符串方法写一个
def kooka_counter(laughing):
    count = 0
    while laughing != '':
      pref = 'ha' if laughing[:2] == 'ha' else 'Ha'
      laughing = laughing.lstrip(pref)
      count += 1
    return count

冬雪雪冬 发表于 2017-5-7 16:03:53

冬雪雪冬 发表于 2017-5-7 09:16
用字符串方法写一个

第四行写的太烂了。改为:
pref = laughing[:2]

xiaopingzi1995 发表于 2017-5-8 09:43:19

急啊急啊

ooxx7788 发表于 2017-5-8 09:45:43

xiaopingzi1995 发表于 2017-5-8 09:43
急啊急啊

急什么呢?急着看答案啊

badaoqingchen 发表于 2017-5-8 13:23:56

666

余欲渔 发表于 2017-5-10 11:00:33

我这是作弊了么。。。
def xn(s='HahahahaHa'):
    c=s.replace('a','')
    sw,sl=0,0
    for i in c:
      if i!=sw:
            sl+=1
            sw=i
    return sl
print(xn("HaHaHahahaHaHa"))

余欲渔 发表于 2017-5-10 11:01:58

原来楼主也是把a剔除了先。。。

ooxx7788 发表于 2017-5-10 11:11:51

余欲渔 发表于 2017-5-10 11:01
原来楼主也是把a剔除了先。。。

我们俩的这个有点点像。不过还是你的简单点点。

whsb564308702 发表于 2017-5-10 11:40:39

1

solomonxian 发表于 2017-6-30 18:09:11

这道题明明答过了,回帖不见了··· ···
应该就是问你字符串“Ha”首字母发生了几次大小写变化+1
def kooka_counter(s):
    string = s.replace("a","")
    num = 0 # 变化次数
    for i in range(len(string)-1):
      if string != string:
            num += 1
    return 0 if len(s)==0 else num+1 # 空字符串的情况
试下用字符串的 find 方法递归计算数值
def kooka_counter2(s):
    if len(s) == 0:
      return ""
    else:
      counter = {"Ha":0, "ha":0}
      word = ["Ha","ha"]
      i = word.index(s[:2])
      
      def kc(s, i):
            num = s.find(word)
            if num == -1:
                return sum(counter.values())
            else:
                counter] += 1
                return kc(s,(i+1)%2)
    return kc(s,i)

ooxx7788 发表于 2017-6-30 18:10:52

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



因为论坛回档了,所以不用觉得自己穿越了。

朔夜 发表于 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'))

编程新血 发表于 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))

ooxx7788 发表于 2017-11-28 23:00:41

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



应该不会那么惨吧,前面还是有很多题目都是比较简单的。

yjsx86 发表于 2018-1-21 22:48:48

import itertools
print(len())

AdaHao 发表于 2018-1-22 12:41:44

我只想坦诚的说两个字:不会

AGXA 发表于 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 == a:
            count = count
      else:
            count += 1
    return count

n = raw_input('shuru: ')

print kooka_counter(n)

victor.xu 发表于 2018-3-29 12:21:43

def kooka_counter(laughing):
    counter = 0
    while laughing:
      a = laughing[:2]
      laughing = laughing.lstrip(a)
      counter += 1
    return counter
lst = ['', 'hahahahaha', 'hahahahahaHaHaHa', 'HaHaHahahaHaHa', 'hahahahahahahaHaHa']
for i in lst:
    print(kooka_counter(i))
页: [1] 2
查看完整版本: Python:每日一题 40