0

次のような関数 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クラスから)。説明したように、string->ints の辞書を取り、「手」を出力します。

私が問題を抱えているのは、これを適切に表示することです。やってみると

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() メソッドを変更せずにどうすればよいでしょうか?

私の評価がオフの場合、何が起こっていますか?

編集:この機能はクラスから提供されたものであり、そのまま使用する必要があります。str を返すように変更する方がはるかに簡単であることは理解していますが、それを行わずに正しい出力を達成するにはどうすればよいでしょうか?

さらに編集:私が書いたとおりの出力を要求するオートグレーダーを扱っています。うるさくて申し訳ありませんが、答えに感謝し、これがなければそれらを使用します。

最終編集: 明確化していただきありがとうございます。あなたのアイデアを使用して、この関数内で必要なことを実行するヘルパー関数を作成します!

FINAL 最終編集: わかった! 私がしなければならなかったのは、

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

実際の最終編集の場合:

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

4 に答える 4

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 ステートメントの最後にコンマを追加して改行を出力しないでください。

print 'Current Hand:',
displayHand(hand)
于 2013-03-08T17:02:31.270 に答える
2

提供された関数を使用する必要があり、それを修正しようとしてはならない場合は、これを行うことができます。

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

混乱しています。Python 2 または 3 を使用していますか?

Python 2 の場合:

print 'Current Hand" ',
displayHand(hand)
于 2013-03-08T17:02:55.593 に答える
0

その関数を実際に変更できない場合は、関数を呼び出して後で通常に戻す前に、標準出力を文字列にリダイレクトすることをお勧めします。

この投稿では、その方法について説明しています。Pythonのstdoutをある種の文字列バッファにリダイレクトできますか?

于 2013-03-08T18:27:38.857 に答える
0

まず、displayHand関数は何も返さないため、結果を出力しようとするとNone. おそらくprint、関数からこれらのステートメントを削除し、代わりに文字列を返す必要があります。

print次に、 Python 2 を使用しているように見えますが、Python 3 で可能な関数として使用しようとしています。その場合は、printステートメント引数の周りの括弧を削除する必要があります。

于 2013-03-08T17:04:40.047 に答える