Python-返回无

Python-返回无,python,Python,我已经开始使用GooglePython类,但是我得到了一些奇怪的结果,一整天的调试并没有帮助我解决这个问题 似乎正在发生的是,函数返回的不是我分配给它们的值,而是“无”,但我无法理解为什么会发生这种情况。我写了一些调试行,并试图逐步通过它,但我看到是什么导致的行为 下面是一些调试输出的示例: C:\Users\toshiba\Dropbox\DEV\python\google-python-exercises\basic>python string2.py front_back X

我已经开始使用GooglePython类,但是我得到了一些奇怪的结果,一整天的调试并没有帮助我解决这个问题

似乎正在发生的是,函数返回的不是我分配给它们的值,而是“无”,但我无法理解为什么会发生这种情况。我写了一些调试行,并试图逐步通过它,但我看到是什么导致的行为

下面是一些调试输出的示例:

C:\Users\toshiba\Dropbox\DEV\python\google-python-exercises\basic>python string2.py
front_back
  X  got: None expected: 'abxcdy'
 OK  got: 'abcxydez' expected: 'abcxydez'
 OK  got: 'KitDontenut' expected: 'KitDontenut'
代码来自googles类,然后是我编写的函数

# F. front_back
# Consider dividing a string into two halves.
# If the length is even, the front and back halves are the same length.
# If the length is odd, we'll say that the extra char goes in the front half.
# e.g. 'abcde', the front half is 'abc', the back half 'de'.
# Given 2 strings, a and b, return a string of the form
#  a-front + b-front + a-back + b-back
def front_back(a, b):
  # +++your code here+++

  # Debug hardcode setting
  # set to 1 to debug (default 0 off)
  letsDebug = 0

  alpha, bravo = a, b
  if letsDebug == 1:
        endString = a \
        + ' ' \
        + b
        return endString

  lenA = len(alpha)
  lenB = len(bravo)

  if lenA % 2 == 1:
    statAlpha = 'odd'
  else:
    statAlpha = 'even'

  if lenB % 2 == 1:
    statBravo = 'odd'
  else:
    statBravo = 'even'
  if letsDebug == 2:
        endString = a \
        + ' ' \
        + b \
        + ' ' \
        + statAlpha \
        +  ' ' \
        + statBravo 
        return endString

  workB = lenB / 2
  workA = lenA / 2
  if letsDebug == 3:
        endString = a \
        + ' ' \
        + b \
        + ' ' \
        + statAlpha \
        +  ' ' \
        + statBravo \
        + ' ' \
        + str(workA) \
        + ' ' \
        + str(workB) 
        return endString

  if statAlpha == 'even':
    aFront, aBack = alpha[:workA], alpha[-workA:]
  else:
    aFront, aBack = alpha[:(workA+1)], alpha[-workA:]

  if statBravo == 'even':
    bFront, bBack = bravo[:workB], bravo[-workB:]
  else:
    bFront, bBack = bravo[:(workB+1)], bravo[-workB:]

    if letsDebug == 4:
        endString = a \
        + ' ' \
        + str(workA) \
        + ' ' \
        + b \
        + ' ' \
        + str(workB) \
        + ' ' \
        + statAlpha \
        +  ' ' \
        + statBravo \
        + ' ' \
        + aFront \
        + ' ' \
        + bFront \
        + ' ' \
        + aBack \
        + ' ' \
        + bBack \
        + ' ' \
        + aFront + bFront + aBack + bBack
    else:
        endString = aFront + bFront + aBack + bBack

    return endString


# Simple provided test() function used in main() to print
# what each function returns vs. what it's supposed to return.
def test(got, expected):
  if got == expected:
    prefix = ' OK '
  else:
    prefix = '  X '
  print '%s got: %s expected: %s' % (prefix, repr(got), repr(expected))


# main() calls the above functions with interesting inputs,
# using the above test() to check if the result is correct or not.
def main():
  print 'verbing'
  test(verbing('hail'), 'hailing')
  test(verbing('swiming'), 'swimingly')
  test(verbing('do'), 'do')

  print
  print 'not_bad'
  test(not_bad('This movie is not so bad'), 'This movie is good')
  test(not_bad('This dinner is not that bad!'), 'This dinner is good!')
  test(not_bad('This tea is not hot'), 'This tea is not hot')
  test(not_bad("It's bad yet not"), "It's bad yet not")

  print
  print 'front_back'
  test(front_back('abcd', 'xy'), 'abxcdy')
  test(front_back('abcde', 'xyz'), 'abcxydez')
  test(front_back('Kitten', 'Donut'), 'KitDontenut')

if __name__ == '__main__':
  main()

非常感谢任何能够破译我在这里所处位置的人。

您有一条从最后一条if-in-front\u-back()中走出的路径,这条路径没有包含在return语句中。这个:

if statBravo == 'even':

返回语句中没有包含最后一个if front_back()的路径。这个:

if statBravo == 'even':

看起来
front\u back
末尾的整个块缩进了太多级别。从
if letsDebug==4:
return endString
-这都是从它上面开始的else块的一部分(如果statBravo=='even':语句的
else
)。我猜这应该是在函数范围内。

看起来前后
末尾的整个块缩进了太多级别。从
if letsDebug==4:
return endString
-这都是从它上面开始的else块的一部分(如果statBravo=='even':
语句的
else
)。我猜这应该是在函数范围内。

python中的函数返回
None
如果您没有从中返回任何内容,或者如果您显式地从中返回
None
。您应该只发布代码中需要帮助的相关部分。这次我已经删掉了不相关的部分,但是为了将来,请确保在你发布问题之前这样做。代码在“不错”和“正面”测试中都失败了。你移走的太多了。这应该是两个问题吗?或者最好读取另一部分?如果您没有从python中返回任何内容,或者如果您显式地从python中返回
None
,python中的函数将返回
None
。您应该只发布代码中需要帮助的相关部分。这次我已经删掉了不相关的部分,但是为了将来,请确保在你发布问题之前这样做。代码在“不错”和“正面”测试中都失败了。你移走的太多了。这应该是两个问题吗?还是最好阅读另一篇文章?我回去重新嵌入了整个函数,它在没有代码更改的情况下工作。我第一次和空白区较量,这并不好玩。我想它一定是被剪切和粘贴弄糊涂了,在《绝地武士》中没有出现。我将尝试其他编辑,看看他们是否处理得更好。我喜欢崇高的文本2,也许这将阻止这种事情发生这么多前瞻性。在一个有数千行的模块中,试图追踪一个空格和一个制表符的想法是可怕的。我建议使用IDE或文本编辑器,可以进行自动空格/制表符转换和自动缩进。我个人将EclipseIDE与PyDev一起使用,但主要是因为我也将Eclipse用于其他语言。粘贴文本时,它会自动将空格转换为制表符(或以其他方式),并将其缩进到粘贴到的块的级别。我返回并重新缩进了整个函数,它在不更改代码的情况下工作。我第一次和空白区较量,这并不好玩。我想它一定是被剪切和粘贴弄糊涂了,在《绝地武士》中没有出现。我将尝试其他编辑,看看他们是否处理得更好。我喜欢崇高的文本2,也许这将阻止这种事情发生这么多前瞻性。在一个有数千行的模块中,试图追踪一个空格和一个制表符的想法是可怕的。我建议使用IDE或文本编辑器,可以进行自动空格/制表符转换和自动缩进。我个人将EclipseIDE与PyDev一起使用,但主要是因为我也将Eclipse用于其他语言。粘贴文本时,它会自动将空格转换为制表符(或以其他方式),并将其缩进到粘贴到的块的级别。