2017-02-11 3 views
0

Desired outputDesired outputvariant中に変換すべての引数は、Pythonコードのこのビットと間違っているものを見つけるように見えることはできません:はTypeError:ない文字列の書式設定操作

print('%-*s', low, '%-*s', mid, ' %-*s', high, '%-*s' 
     % (8, "", (var_range//3), "", (var_range//3), "", (var_range//3), "")) 

私はスペースに変数をしようとしています:lowmid、およびユーザからの入力に基づいてhighvar_range//3)。 (var_range // 3)はカスタマイズされた間隔として機能します。私は出力がユーザーの範囲によって異なるようにしたい。

P.S.私は、Python 3.4.4を使用しています

+0

それを次のタプルであるように書式文字列はのような多くの ''%_formatting specifiers_を含むことを期待_operator_ ''%。あなたのコードスニペットで使用されている書式設定文字列は最後の ''% - * s' 'ですが、それに続くタプルは8つのもの('(8、 ""、(var_range // 3)、 ""、(var_range // 3)、 ""、(var_range // 3)、 "") ')。 – martineau

+0

(8、(var_range // 3)、(var_range // 3)))を使用すると、同じエラーが発生します –

+0

フォーマット文字列 ''% - * s'' string_には1つの ''%''文字(8または4ではない)しか含まれていないので、1つの項目が与えられていると期待します。 ''% ''を使用しない['str.format()'](https://docs.python.org/3/library/stdtypes.html#str.format)メソ​​ッドを使うほうが簡単かもしれません。 '文字。私はあなたがここでは2つの異なるものに使用されているという事実を混乱させていると思います。文字列_operator_ **と**は演算子が書式設定_string_で期待するもので、式全体の一部として渡されます。 – martineau

答えて

0

あなたが作るしようとしているが、この例では、役立つかもしれないものを出力I正確にわからない:

var_range = 99 
print('%*s %*s %*s' % (8, var_range//3, 8, var_range//3, 8, var_range//3)) 

出力時:

33  33  33 

このフォーマット文字列が必要ですそれに続くタプルの合計6つの値の3つのペア。各ペアの最初の値はフィールドの幅(3つのケースすべてで8)で、2番目の値は表示する数値です(この場合も同様に、var_range//3を3回繰り返したため同じです)。

各値の書式を'%-*sから'%*sに変更しました。値の表示は、幅を左揃えにする代わりに右揃えにしました。詳細はstring formatting documentationを参照してください。

+0

希望の出力の写真を追加しました –

0

使用newer style string formatting

>>> var_range=24 
>>> print('{:<{fill}}{:<{fill}}{:<{fill}}'.format(2, 12, 22, fill=var_range//3)) 
     2  12  22  

あなたのパターンは、それぞれに同じであるため、一つのフィールドの書式を作成し、それを3回繰り返します。

>>> print(('{:>{fill}}' * 3).format(2, 12, 22, fill=var_range//3)) 
     2  12  22 
関連する問題