学习python艰苦的方法练习25 print_first不会给出与print_last相同的结果

时间:2015-02-20 00:44:48

标签: python

因此,在练习25中,您的任务是创建一个分解句子并对其进行排序或打印第一个/最后一个单词的脚本。然后有一个功能,它完成所有排序并打印第一个和最后一个单词。现在我的不打印最后一个字。所以检查了我的print_last_word(单词)并且它运行但是它返回一个单词''所以而不是等待我得'等'所以我想这会弄乱我的print_first_and_last_sorted(句子),但我不明白为什么。

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

def sort_words(words):
    """sort the words"""
    return sorted(words)

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)
    return 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)

结果:

>>> import ex25b
>>> sentence = "All good things come to those who wait"
>>> words = ex25b.break_words(sentence)
>>> words
['All', 'good', 'things', 'come', 'to', 'those', 'who', 'wait']
>>> ex25b.print_first_word(words)
All
>>> ex25b.print_last_word(words)
'wait'
>>> ex25b.print_first_and_last_sorted(sentence)
All
>>>

2 个答案:

答案 0 :(得分:1)

这是因为你的print_first_word函数实际打印了这个单词。您的print_last_word函数只返回单词(不打印它)。只需在此功能中将返回更改为打印。

答案 1 :(得分:0)

在答案@Gerrat的同时,您的print_last_wordprint_first_word实际上会更改输入列表。 pop操作占用列表中的一个元素:

a=[1,2,3]
print_last_word(a)
print(a)
# a is [1, 2] # the 3 is gone. Pop removed it.

不确定您是否意识到这一点,但对于应该只打印最后一个元素而不是实际从列表中删除并打印它的函数来说,这是非常危险的行为。你可能想要真正删除它,但这个名字很容易让人误解。