3

標準ライブラリに、印刷関数が出力するものをすべて取り、それを文字列として返す関数があるかどうか疑問に思っています。あるべきだと思われますが、ある場合は適切な場所を探していません。

私の状況は、リストに格納された数字の文字列を(いくつかの計算の後に)作成するプログラミング演習を行ったことです。

digits=[1, 0, 0, 1, 0, 1, 0, 0, 0, 1]

および小数点の位置dp=4

これを 10 進数のようなものに丸めたいと思います。印刷機能は、私が望むものを表示するのにうまく機能します:

print(*(digits[:dp + 1] + ['.'] + digits[dp + 1:]), sep='')

生産する10010.10001

しかし、この結果を文字列として返したい場合は、追加のコードを記述する必要があるようです。難しいというわけではありませんが、すでに組み込まれているものがある場合は不要です。print、format、または % 演算子のどれもうまくいかないようです。私が見つけた最も近いものは StringIO クラスでしたが、もう少しシンプルで難解でないものを望んでいました。

4

4 に答える 4

2

次のように非常によく似た独自の関数を定義できますprint(未テスト、タブレットに Python はありません)。

def print_to_string(*objects, sep=' ', end='\n'):
     return sep.join(str(obj) for obj in objects) + end

printfile引数は、文字列に対してあまり意味がありません。

于 2013-10-08T21:59:41.047 に答える
1

Python3のprint関数はfile引数のwriteメソッドを呼び出します

StringIO を使いたくない場合は、独自に記述できます。

class StringWrapper:
  def __init__(self): 
    self.string = "";
  def write(self, string):
    self.string += string

これは file 引数とともに使用されます。

s = StringWrapper()
print("foo", "bar", file=s)
# s.string will be "foo bar\n"
于 2013-10-08T21:57:27.227 に答える
-1

文字列の結合コマンドを確認してください。まず、数字を文字列に変換する必要があります。

sdigits = [str(i) for i in digits]
''.join(sdigits[:dp+1] + ['.'] + sdigits[dp+1:])
>>> '10010.10001
于 2013-10-08T21:56:34.173 に答える