计算字符串中的字符数

时间:2015-02-09 02:54:53

标签: python charactercount

所以我试图计算anhCrawler并使用“DEATH STAR”的位置返回带有和不带空格的字符数,并将其返回到报告中。我也无法正确计算数字。请帮忙!

anhCrawler = """Episode IV, A NEW HOPE. It is a period of civil war. \
Rebel spaceships, striking from a hidden base, have won their first \
victory against the evil Galactic Empire. During the battle, Rebel \
spies managed to steal secret plans to the Empire's ultimate weapon, \
the DEATH STAR, an armored space station with enough power to destroy \
an entire planet. Pursued by the Empire's sinister agents, Princess Leia\
races home aboard her starship, custodian of the stolen plans that can \
save her people and restore freedom to the galaxy."""

theReport = """
This text contains {0} characters ({1} if you ignore spaces).
There are approximately {2} words in the text. The phrase
DEATH STAR occurs and starts at position {3}.
"""

def analyzeCrawler(thetext):
numchars = 0
nospacechars = 0
numspacechars = 0
anhCrawler = thetext
word = anhCrawler.split()
for char in word:
    numchars = word[numchars]
    if numchars == " ":
        numspacechars += 1
anhCrawler = re.split(" ", anhCrawler)
for char in anhCrawler:
    nospacechars += 1
numwords = len(anhCrawler)
pos = thetext.find("DEATH STAR")
char_len = len("DEATH STAR")
ds = thetext[261:271]
dspos = "[261:271]"

return theReport.format(numchars, nospacechars, numwords, dspos)
print analyzeCrawler(theReport)

3 个答案:

答案 0 :(得分:2)

你过度思考这个问题。

字符串中的字符数(返回520):

len(anhCrawler)

字符串中的非空白字符数(使用split使用split会自动删除空格,而join会创建一个没有空格的字符串)(返回434):

len(''.join(anhCrawler.split()))

找到" DEATH STAR"的位置(返回261):

anhCrawler.find("DEATH STAR")

答案 1 :(得分:1)

首先,您需要缩进函数内部的代码。其次......您的代码可以简化为以下内容:

theReport = """
    This text contains {0} characters ({1} if you ignore spaces).
    There are approximately {2} words in the text. The phrase
    DEATH STAR is the {3}th word and starts at the {4}th character.
"""

def analyzeCrawler(thetext):

    numchars = len(anhCrawler)
    nospacechars = len(anhCrawler.replace(' ', ''))
    numwords = len(anhCrawler.split())

    word = 'DEATH STAR'
    wordPosition = anhCrawler.split().index(word)
    charPosition = anhCrawler.find(word)

    return theReport.format(
        numchars, nospacechars, numwords, wordPosition, charPosition
    )

我修改了最后两个format参数,因为它并不清楚dspos的含义,尽管它可能很明显,而且我没有看到它。在任何情况下,我都包含了单词和char位置。您可以确定您真正想要包含哪一个。

答案 2 :(得分:1)

在这里,你有一个简化的函数版本:

import re

def analyzeCrawler2(thetext, text_to_search = "DEATH STAR"):

    numchars = len(anhCrawler)
    nospacechars = len(re.sub(r"\s+", "", anhCrawler))
    numwords   = len(anhCrawler.split())
    dspos      =  anhCrawler.find(text_to_search)

    return theReport.format(numchars, nospacechars, numwords, dspos)



print analyzeCrawler2(theReport)


This text contains 520 characters (434 if you ignore spaces).
There are approximately 87 words in the text. The phrase
DEATH STAR occurs and starts at position 261.

我认为技巧部分是从字符串中删除空格并计算非空格字符数。这可以简单地使用正则表达式完成。休息应该是不言自明的。