在Python中打印格式化字符串和函数调用

0 投票
4 回答
8352 浏览
提问于 2025-04-17 18:26

我有一个函数,叫做 displayHand(),它的样子是这样的:

def displayHand(hand):
    """
    Displays the letters currently in the hand.

    For example:
    >>> displayHand({'a':1, 'x':2, 'l':3, 'e':1})
    Should print out something like:
       a x x l l l e
    The order of the letters is unimportant.

    hand: dictionary (string -> int)
    """
    for letter in hand.keys():
        for j in range(hand[letter]):
             print letter,              # print all on the same line
    print                              # print an empty line

这个函数是老师给我的(来自600x课程)。根据描述,它接收一个字符串到整数的字典,然后打印出“手牌”。

我遇到的问题是,想让它正确显示出来。当我尝试这样做:

print('Current Hand: ', displayHand(hand))

结果是这样的:

a d d m o q y 
('Current Hand: ', None)

因为这个函数是老师提供的,我相信代码是有原因这样写的,但我有些不明白。

我希望得到的输出是这样的:

Current Hand: a d d m o q y

我对这些东西完全是新手,所以我甚至不知道该问什么问题。

我的判断是:从我能拼凑出来的来看,displayHand()并不返回任何东西,这就是搞砸一切的原因。但是我该如何捕捉这个函数的打印输出,并以我想要的方式展示呢?我在想,是否应该尝试把它捕捉到一个字符串里,然后返回这个字符串,但假设

老师是想演示某些东西,我该如何在不改变 displayHand() 方法的情况下做到这一点呢?

如果我的判断不对,那到底发生了什么呢?

补充说明:这个函数是课程给我的,我必须这样使用它。我明白如果改成返回一个字符串会简单得多,但我该如何在不这样做的情况下得到正确的输出呢?

进一步补充:我正在处理一个自动评分系统,它要求输出必须完全按照我写的那样。抱歉这么挑剔,我很感激大家的回答,如果不是因为这个,我会使用你们的建议。

最后补充:谢谢你的澄清——我打算使用你的想法,在这个函数内部创建一个辅助函数,来完成我需要的功能!

最终的最终补充:我搞定了!我只需要这样做:

print('Current Hand:'),
displayHand(hand)

真的最后的补充:

Hah! you got it too! thank you so much for the help, I appreciate it!

4 个回答

0

如果你真的不能修改那个函数,那么你可以在调用这个函数之前,把标准输出重定向到一个字符串里,然后在调用完之后再把它恢复正常。

这篇文章解释了怎么做:我可以把Python中的标准输出重定向到某种字符串缓冲区吗?

2

如果你必须使用这个给定的函数,并且不能尝试去修复它,你可以这样做:

print('Current Hand: ', end='')
displayHand(hand)

我有点困惑,你是用 Python 2 还是 Python 3 呢?

在 Python 2 中:

print 'Current Hand" ',
displayHand(hand)
2

你的函数已经在打印内容了,它并没有返回任何东西。

不要试图去“捕捉”打印出来的内容,直接把函数改成返回手牌,并把它格式化成字符串:

def displayHand(hand):
    letters = []
    for letter, count in hand.iteritems():
        letters.extend([letter] * count)
    return ' '.join(letters)

这样就会得到:

>>> hand = {'a': 1, 'q': 1, 'd': 2, 'y': 1, 'm': 1, 'o': 1}
>>> displayHand(hand)
'a q d d y m o'
>>> print 'Current Hand:', displayHand(hand)
Current Hand: a q d d y m o

如果你不应该修改 displayHand() 函数,那就用同样的方法在这个函数里操作,不要在打印语句的末尾加换行符,可以在打印语句的末尾加一个逗号:

print 'Current Hand:',
displayHand(hand)

撰写回答