我是Python的初学者,如果我有疑问,将不胜感激。 因此,我在一个网站中找到了此练习:返回给定字符串中出现的子字符串“ Emma”的总数。给出的字符串是“ Emma是优秀的开发人员。艾玛是一位作家”。但是我不完全了解解决方案。 解决方案:
def count_emma(statement):
print("Given String: ", statement)
count = 0
for i in range(len(statement) - 1):
count += statement[i: i + 4] == 'Emma'
return count
count = count_emma("Emma is good developer. Emma is a writer")
print("Emma appeared ", count, "times")
在-1中的确切含义是什么
range(len(statement)-1):
其中的[i:i + 4]是什么意思
count += statement[i: i + 4] == 'Emma'
答案 0 :(得分:1)
range(len(statement)-1)
的意思是将每个数字从0循环到语句的长度-1。此解决方案不必考虑最后一个元素,因为在最后一个元素*之后的语句中有零个字符。 >
如果语句的4个字符从i开始切到i + 4(不包括i),则
count += statement[i: i+4] == 'Emma'
会将count递增1。这是可行的,因为布尔实际上是整数的一种特殊情况,其中True表示为1,False表示为0。因此,如果'Emma'不等于statement [i:i + 4],则0为添加(无效果),如果是,则添加1。
*该解决方案可能在len(statement) - 4
之后停止,因为后3个字符也不能与4个字符的目标字符串'Emma'相匹配。
答案 1 :(得分:0)
statement[i: i + 4]
是一个切片,将字符从i
(包括)转换为i+4
(不包括),并将其与字符串"Emma"
进行比较。只要第一个值(开始)在字符串的范围内,第二个值(结束)是否超出范围就无关紧要;只是意味着它返回了较短的子字符串。
因此,-1
中的range(len(statement)-1)
在这里没有任何作用。它的作用是使循环i
倒数第二个更早地停止循环,但是如果没有-1,它将同样有效。
话虽如此,您也可以只使用statement.count("Emma"))
来获取子字符串"Emma"
的计数(但是请注意,这不会计算重叠的匹配项)
答案 2 :(得分:0)
首先,字符串切片返回该字符串EG的子字符串。 "string"[1:4]
成为tri
。
现在,statement[i:i+4]
正在检查循环中当前点的下4个字母。因此,如果i
为2,则statement[i:i+4]
为ma a
。当i
为24时,statement[i:i+4]
为Emma
。因此,当i = 0或i = 24时,statement[i:i+4] == "Emma"
将为True。
True和False也可以分别表示为整数1和0,因此从本质上讲,每当它为true时,我们就加1进行计数。