Python 澄清简单函数

Python 澄清简单函数,python,Python,字符串的优点遵循以下两条规则: 包含一个或多个“u”的字符串的优点为0 否则,字符串的优度等于字符串中“g”的数量 “gbbgb”是2 “gubgb”是0 #我理解这个函数 (s) 如果s.count('u')>0: 返回0 其他: 返回s.count('g') #但不是这个。 def最佳_切片(s、k): ''s是str,k是一个整数,因此0为什么最佳开始=-1? 阅读说明书。它说如果k=0return-1,那么就会发生这种情况 除此之外,它还尝试了长度为k的所有可能片段 比如说, 字符串

字符串的优点遵循以下两条规则:

  • 包含一个或多个“u”的字符串的优点为0
  • 否则,字符串的优度等于字符串中“g”的数量
“gbbgb”是2
“gubgb”是0

#我理解这个函数
(s)
如果s.count('u')>0:
返回0
其他:
返回s.count('g')
#但不是这个。
def最佳_切片(s、k):

''s是str,k是一个整数,因此0为什么
最佳开始=-1
? 阅读说明书。它说如果
k=0
return-1,那么就会发生这种情况

除此之外,它还尝试了长度为k的所有可能片段

比如说,

字符串:“asgeksv” k=5


然后,“asgek”、“sgeks”和“geksv”被用来测试最佳善值。

为什么
最佳开始=-1
? 阅读说明书。它说如果
k=0
return-1,那么就会发生这种情况

除此之外,它还尝试了长度为k的所有可能片段

比如说,

字符串:“asgeksv” k=5


然后,“asgek”、“sgeks”和“geksv”被试着获得最佳善值。

这段代码并不是特别适合python的。考虑这个问题:

def goodness(s):
    return 0 if 'u' in s else s.count('g')

def substrings(s, length):
    "Generate all substrings of given length."
    for i in range(len(s) - length + 1):
        yield s[i:i+length]

print list(substrings('abcdefgh', 3)) # ['abc', 'bcd', 'cde', 'def', 'efg', 'fgh']   

def best_slice(s, length):
    """Return the 'best' substring."""
    return max(substrings(s, length), key=goodness)

print best_slice('abcgabgoguffg', 3) # 'gog'

如果您在理解这段代码时遇到问题,请告诉我们。

这段代码并不特别适合Python。考虑这个问题:

def goodness(s):
    return 0 if 'u' in s else s.count('g')

def substrings(s, length):
    "Generate all substrings of given length."
    for i in range(len(s) - length + 1):
        yield s[i:i+length]

print list(substrings('abcdefgh', 3)) # ['abc', 'bcd', 'cde', 'def', 'efg', 'fgh']   

def best_slice(s, length):
    """Return the 'best' substring."""
    return max(substrings(s, length), key=goodness)

print best_slice('abcgabgoguffg', 3) # 'gog'

如果您在理解此函数时遇到问题,请告诉我们。

函数第一行中的解释对其进行了很好的总结,但让我们逐行解释发生了什么

def best_slice(s, k):
    ''' s is str, k is an integer such that 0 <= k <= len(s). Return the starting index of the length-k slice of s with highest goodness. If k is zero, return -1.'''
这一行告诉我们何时停止在
s
的片中循环。我们不需要走得更远,因为
len(s)-k
是字符串中长度
k
的最后一个可能的起始切片索引

    best_start = -1 # ?
best\u start
是我们在for循环中,如果
slice\u goodness
永远不大于
best\u goodness
时将返回的值。因此,如果
k
小于0,则函数返回-1

    best_goodness = 0
我们将其设置为0,这样我们就可以循环检查所有的切片,以检查是否存在高于0的善值。严格地说,这个变量不是必需的,但是在我们的循环中最好有一个命名变量,而不是一个幻数0。它增加了清晰度,但在技术上并不需要

    for i in range(stop + 1):
       cur_slice = s[i:i+k]
       slice_goodness = goodness(cur_slice)
现在我们通过函数得到切片的优点

    if slice_goodness > best_goodness:
        best_start = i
        best_goodness = slice_goodness

    return best_start

如果这个切片是我们目前为止最好的切片,我们将它保存起来,以便针对进一步的切片进行测试,并保存它的索引,以便在它是最好的切片时返回。

函数第一行中的解释对它进行了很好的总结,但让我们逐行解释发生了什么

def best_slice(s, k):
    ''' s is str, k is an integer such that 0 <= k <= len(s). Return the starting index of the length-k slice of s with highest goodness. If k is zero, return -1.'''
这一行告诉我们何时停止在
s
的片中循环。我们不需要走得更远,因为
len(s)-k
是字符串中长度
k
的最后一个可能的起始切片索引

    best_start = -1 # ?
best\u start
是我们在for循环中,如果
slice\u goodness
永远不大于
best\u goodness
时将返回的值。因此,如果
k
小于0,则函数返回-1

    best_goodness = 0
我们将其设置为0,这样我们就可以循环检查所有的切片,以检查是否存在高于0的善值。严格地说,这个变量不是必需的,但是在我们的循环中最好有一个命名变量,而不是一个幻数0。它增加了清晰度,但在技术上并不需要

    for i in range(stop + 1):
       cur_slice = s[i:i+k]
       slice_goodness = goodness(cur_slice)
现在我们通过函数得到切片的优点

    if slice_goodness > best_goodness:
        best_start = i
        best_goodness = slice_goodness

    return best_start

如果该切片是我们目前最好的切片,我们将其保存起来,以便与其他切片进行测试,并保存其索引以备返回,以防它是最好的切片。

您不了解什么部分?您不了解什么部分?您是对的,函数不是python函数,但您也应该回答他的问题。如果是别人的代码或作业呢?指出一个更符合python的解决方案是好的,但是除了给他实际要求的帮助之外。你是对的,函数不是python的,但是你也应该回答他的问题。如果是别人的代码或作业呢?指出一个更符合python的解决方案是好的,但是除了给他实际需要的帮助之外。