给定一个字符串,返回子字符串长度2在字符串中出现的次数,并且作为字符串的最后2个字符,因此"hixxxhi“返回1(我们不计算结束的子字符串)。
last2('hixxhi') → 1
last2('xaxxaxaxx') → 1
last2('axxxaaxx') → 2我在其中一个网站(https://codingbat.com/prob/p145834)上发现了这个问题。
现就上述问题在网站上的答案如下:
def last2(str):
# Screen out too-short string case.
if len(str) < 2:
return 0
# last 2 chars, can be written as str[-2:]
last2 = str[len(str)-2:]
count = 0
# Check each substring length 2 starting at i
for i in range(len(str)-2):
sub = str[i:i+2]
if sub == last2:
count = count + 1
return count我对下面提到的代码行有疑问。
last2 = str[len(str)-2:]现在,我知道这段代码正在提取字符串'str‘的最后两个字母。让我感到困惑的是变量名。正如您所看到的,变量名称与函数的名称相同。那么这行代码是否再次调用函数并更新变量'str‘的值??
发布于 2019-12-23 00:27:27
def last2(str):
. . .这将创建一个名为str的参数,该参数隐藏了内置的str类*。在此函数中,str引用的是str参数,而不是str内置类。
不过,这是一种糟糕的做法。不要将变量命名为与现有内置相同的名称。这导致了像这样的混乱情况,并导致了像this这样的问题。
更好的名称应该是描述字符串用途的名称,而不仅仅是泛型的、没有意义的str。
*内置的str实际上是一个类,而不是一个普通的函数。str(x)是对str类的构造函数的调用。
发布于 2020-10-26 09:31:40
def last2(str):
if len(str) == 0:
return 0
last_two = str[-2::]
count = 0
for i in range(len(str)):
if last_two == str[i :i + 2]:
count += 1
return count-1这是第一次对我来说正确的答案。官方的答案更好,但这个答案可能不会让你感到困惑。
https://stackoverflow.com/questions/59445968
复制相似问题