0

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

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)
4

3 回答 3

2

你多虑了这个问题。

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

len(anhCrawler)

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

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

查找“死亡之星”的位置(返回 261):

anhCrawler.find("DEATH STAR")
于 2015-02-09T03:03:32.817 回答
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,尽管它可能很明显而且我没有看到它。在任何情况下,我都包含了单词和字符位置。您可以确定您真正想要包括哪一个。

于 2015-02-09T03:08:49.137 回答
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.

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

于 2015-02-09T03:08:53.247 回答