学习 Python 困难的方法 Ex26: 没有得到预期的结果

Learn Python the Hard Way Ex26: Not Getting Expected Result

    def break_words(stuff):
        """This function will break up words for us."""
        words = stuff.split(' ')
        return words

    def sort_words(words):
        """Sorts the words."""
        return words.sort()

    def print_first_word(words):
        """Prints the first word after popping it off."""
        word = words.pop(0)
        print word

    def print_last_word(words):
        """Prints the last word after popping it off."""
        word = words.pop(-1)
        print word

    def sort_sentence(sentence):
        """Takes in a full sentence and returns the sorted words."""
        words = break_words(sentence)
        return sort_words(words)

    def print_first_and_last(sentence):
        """Prints the first and last words of the sentence."""
        words = break_words(sentence)
        print_first_word(words)
        print_last_word(words)

    def print_first_and_last_sorted(sentence):
        """Sorts the words then prints the first and last one."""
        words = sort_sentence(sentence)
        print_first_word(words)
        print_last_word(words)


    print "Let's practice everything."
    print 'You\'d need to know \'bout escapes with \ that do \n newlines and \t tabs.'

    poem = """
    \tThe lovely world
    with logic so firmly planted
    cannot discern \n the needs of love
    nor comprehend passion from intuition
    and requires an explanation
    \n\t\twhere there is none.
    """


    print "--------------"
    print poem
    print "--------------"

    five = 10 - 2 + 3 - 5
    print "This should be five: %s" % five

    def secret_formula(started):
        jelly_beans = started * 500
        jars = jelly_beans / 100
        crates = jars / 100
        return jelly_beans, jars, crates


    start_point = 10000
    beans, jars, crates == secret_formula(start-point)

    print "With a starting point of: %d" % start_point
    print "We'd have %d jeans, %d jars, and %d crates." % (beans, jars, crates)

    start_point = start_point / 10

    print "We can also do that this way:"
    print "We'd have %d beans, %d jars, and %d crabapples." % secret_formula(start_point)


    sentence = "All good\tthings come to those who wait."

    words = ex25.break_words(sentence)
    sorted_words = ex25.sort_words(words)

    print_first_word(words)
    print_last_word(words)
    print_first_word(sorted_words)
    print_last_word(sorted_words)
    sorted_words = ex25.sort_sentence(sentence)
    print_sorted_words

    print_first_and_last(sentence)

    print_first_and_last_sorted(sentence)

这是我更新后的代码。我认为代码中存在一些逻辑错误,但我更新了它以尝试重新开始,因为我认为我完全搞砸了代码。我应该提到的第一件事是我在第 77 行有一个语法错误,这似乎无法识别,因为我认为,首先,如果我将一个字符串分配给一个变量,那么它不应该给出语法错误。我猜它在另一条线上。

我重新开始尝试从头开始做所有事情。这越来越荒谬了。我认为接下来我必须找到的是剩下的逻辑错误。如果我错了告诉我。

您的排序方法不正确。在 python 中,somelist.sort() 对列表进行原位排序,returns None,因此您最终会删除列表。您可以执行 words = sorted(words) 或只是 words.sort() 但执行 words = words.sort() 最终会将 words 设置为 None.

此外,您的拆分词很可能不正确。执行 stuff[0] 获取句子数组中的第一个字符串;将其转换为列表 returns 一个字母列表,每个字母都是列表的一个元素。鉴于您如何定义句子,您已经有了一个拆分句子;如果你做了 sentence = "the quick brown fox jumps over the lazy dog), your split words could do sentence.split(" ") 把它分解成单词。

最后,执行 pop 会改变列表;您的列表是 ["A"、"l"、"l"],因此在调用 get_first 或 get_last 3 次后,您现在已经弹出所有元素,因此如您所见,第 4 个 pop 将是 return 空列表。我不知道这是否是期望的行为;如果没有,你可以做 words[0] 得到第一个而不改变,然后 words[-1] 得到最后一个。

我想通了。我应该注释掉第 79-91 行。就是这样!我把其他一切都做得很完美! :D