所以我试图计算一个Crawler,并返回带有和不带有空格的字符数,位置为"死亡之星",并将其返回到报告中。我也记不清数字。请帮忙!
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)
你想得太多了
字符串中的字符数(返回520):
len(anhCrawler)
字符串中的非空白字符数(使用split
就像使用split
一样会自动删除空白,而join
会创建一个没有空白的字符串)(返回434):
len(''.join(anhCrawler.split()))
查找"死亡之星"的位置(返回261):
anhCrawler.find("DEATH STAR")
这里,您已经简化了函数的版本:
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.
我认为技巧部分是从字符串中删除空白,并计算非空格字符数。这可以简单地使用正则表达式来完成。休息应该不言自明。
首先,您需要缩进函数内部的代码。第二您的代码可以简化为以下内容:
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
是什么意思,尽管这可能很明显,我看不到。无论如何,我包含了单词和字符位置。你可以确定你真正想包括哪一个。