3

フォーマットするアイテムの数を見つけ、ユーザーに引数を要求し、それらを元の形式にフォーマットするコードを作成する簡単な方法を理解できないようです。

私がやろうとしていることの基本的な例は次のとおりです(ユーザー入力は> >>> "の後に始まります):

>>> test.py
What is the form? >>> "{0} Zero {1} One"
What is the value for parameter 0? >>> "Hello"
What is the value for parameter 1? >>> "Goodbye"

次に、プログラムはprint(form.format())を使用して、フォーマットされた入力を表示します。

Hello Zero Goodbye One

ただし、フォームに3つの引数がある場合は、パラメーター0、1、および2を要求します。

>>> test.py (same file)
What is the form? >>> "{0} Zero {1} One {2} Two"
What is the value for parameter 0? >>> "Hello"
What is the value for parameter 1? >>> "Goodbye"
What is the value for parameter 2? >>> "Hello_Again"
Hello Zero Goodbye One Hello_Again Two

これは私が考えることができる最も基本的なアプリケーションであり、フォーマットするためにさまざまな量のものを使用します。vars()を使用して必要に応じて変数を作成する方法を理解しましたが、string.format()はリスト、タプル、または文字列を取り込むことができないため、「。format()」をフォーマットするものの数。

4

4 に答える 4

6
fmt=raw_input("what is the form? >>>")
nargs=fmt.count('{') #Very simple counting to figure out how many parameters to ask about
args=[]
for i in xrange(nargs):
    args.append(raw_input("What is the value for parameter {0} >>>".format(i)))

fmt.format(*args)
          #^ unpacking operator (sometimes called star operator or splat operator)
于 2012-07-10T21:43:09.610 に答える
2

これは、空でないフォーマット文字列に対して空の結果を許可する、変更された kindall の回答です。

format = raw_input("What is the format? >>> ")
prompt = "What is the value for parameter {0}? >>> "
params  = []

while True:
    try:
        result = format.format(*params)
    except IndexError:
        params.append(raw_input(prompt.format(len(params))))
    else:
        break
print result
于 2012-07-11T15:22:42.010 に答える
2

最も簡単な方法は、あなたが持っているデータを使用してフォーマットを試みることですIndexError. *アイテムをリストに保持し、メソッドを呼び出すときに表記を使用してアンパックしformat()ます。

format = raw_input("What is the format? >>> ")
prompt = "What is the value for parameter {0}? >>> "
parms  = []
result = ""
if format:
    while not result:
        try:
            result = format.format(*parms)
        except IndexError:
             parms.append(raw_input(prompt.format(len(parms))))
print result
于 2012-07-10T21:50:44.477 に答える
1

最後のパラメーター名の前に * を使用するだけで、後続のパラメーターはすべてそのパラメーターにグループ化されます。その後、必要に応じてそのリストを反復処理できます。

Python で可変引数リストを作成する方法

于 2012-07-10T21:46:03.060 に答える