2017-10-04 146 views
1

这里是我写的代码来找出单词“bob”在单词中重复的次数。一个打印字符串出现次数的程序(Python)

word= 'azcbobobegghakl' 

count =0 

num=0 

for nxt in word: 

    count += 1 

    if nxt =="b": 

     bb= word[count-1:] 

     num += bb.count("bob") 

    else: 

     break 

print("number=" + str(num)) 

它每次都给我number = 0。

+2

删除'else'分支 - 在第一封信吧'breaks' – UnholySheep

回答

0

发生了什么事是:
您是否nxt等于“B”,这不是第一个字母为“A”的情况。

因此,执行else一部分立即制动器回路上与print声明,打印0,因为它从来没有得到过去的第一个字符继续。

只需去除else部分修复了这个

word= 'azcbobobegghakl' 
count =0 
num=0 

for nxt in word: 

    count += 1 

    if nxt =="b": 
     bb= word[count-1:] 
     num += bb.count("bob") 

print("number=" + str(num)) 

输出:number=2

0

考虑如果nxt不是b,会发生什么情况。否则打破循环。这意味着,现在你只检查这个词本身是以b开头的。

也使用count()你会计数相同的子字符串多一次。

0

我想你可能会混淆之间继续突破。没有必要使用中断,即使你可以删除整个其他部分。但如果你不想放弃它,那么用继续代替中断

突破:从回路断线,并执行循环语句后只写(即外循环语句)

继续声明:继续让编译器/解释器跳过整片在continue语句之后编写的代码(循环内)并移至下一个迭代(简单地说,移至列表的下一个索引)。

word= 'azcbobobegghakl' 

count =0 

num=0 

for nxt in word: 

    count += 1 

    if nxt =="b": 

     bb= word[count-1:] 

     num += bb.count("bob") 

    else: 
     continue 

print("number=" + str(num)) 

您还可以使用正则表达式库的方法:

import re 

word= 'azcbobobegghakl' 
count = 0 
pattern_to_match = 'bob' 

for match in re.findall(pattern_to_match,word): 
    count +=1 

print("Match Count : %s" % count) 
相关问题