質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

4回答

914閲覧

python 桁あわせについて。

hood

総合スコア351

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/11/18 09:25

###python 桁あわせについて。
学校の課題で「log x,log2 xを,xを0.1から10.0まで0.1きざみに表にして印刷するプログラムを作れ。」
というものがでました。
計算結果を出力するところまでは難なくできたのですが、綺麗に出力することができません。
下の画像のように、ーが入ると、数表が崩れてしまうのです。
イメージ説明
コードでは{1:4.2f} {2:4.2f}のように全体四桁、浮動小数点2桁としているはずなのですが・・・・
これはどうすれば直るのでしょうか?
どうかご教授お願いします!
参考コード

python

1from math import log 2#浮動小数点の足し算における誤差を防ぐため、iを整数として読み込む。 3i = 1 4print("x","log(x)","log(x,2)") 5while i < 101: 6#iを0.1にしてxに代入 7 x = i / 10.0 8#それぞれ現れる桁を考え、浮動小数点として桁を合わせる。 9 print('{0:3.1f} {1:4.2f} {2:4.2f}'.format(x,log(x),log(x,2))) 10 i=i+1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

-2.30などは5文字あるように見えます。4桁には収まりません。

他の部分も多少手直しして、こんなフォーマットにするときれいに桁が揃います。

python

1'{0:4.1f} {1:5.2f} {2:5.2f}'.format(x,log(x),log(x,2))

投稿2018/11/18 09:32

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hood

2018/11/18 09:39

回答ありがとうございます。.も文字に含めるとは知りませんでした・・・ 勉強になりました!
guest

0

ベストアンサー

from math import log #浮動小数点の足し算における誤差を防ぐため、iを整数として読み込む。 i = 1 print("x","log(x)","log(x,2)") while i < 101: #iを0.1にしてxに代入 x = i / 10.0 #それぞれ現れる桁を考え、浮動小数点として桁を合わせる。 print('{0:4.1f} {1:5.2f} {2:5.2f}'.format(x,log(x),log(x,2))) i=i+1

フォーマットは文字なので"-"も一文字として考える必要があります。
またxについても10.0があるので一文字増えたとするべきですね

投稿2018/11/18 09:30

編集2018/11/18 09:32
foxriver

総合スコア34

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hood

2018/11/18 09:36

回答ありがとうございます! おかげさまで上手くできました! これで僕の単位も救われます・・・!
guest

0

次のようにすれば良いです。

Python

1print('{0:3.1f} {1: 4.2f} {2: 4.2f}'.format(x,log(x),log(x,2))) 2 ^ ^ ← 空白を入れる

実行結果 Wandbox

x log(x) log(x,2) 0.1 -2.30 -3.32 0.2 -1.61 -2.32 0.3 -1.20 -1.74 0.4 -0.92 -1.32 0.5 -0.69 -1.00 0.6 -0.51 -0.74 0.7 -0.36 -0.51 0.8 -0.22 -0.32 0.9 -0.11 -0.15 1.0 0.00 0.00 1.1 0.10 0.14 1.2 0.18 0.26 1.3 0.26 0.38 1.4 0.34 0.49 1.5 0.41 0.58 1.6 0.47 0.68 1.7 0.53 0.77 1.8 0.59 0.85 1.9 0.64 0.93 2.0 0.69 1.00 2.1 0.74 1.07 2.2 0.79 1.14 2.3 0.83 1.20 2.4 0.88 1.26 ...

sign オプションは数値型に対してのみ有効であり、以下のうちのひとつとなります:

オプション意味
'+'符号の使用を、正数、負数の両方に対して指定します。
'-'符号の使用を、負数に対してのみ指定します (デフォルトの挙動です)。
空白空白を正数の前に付け、負号を負数の前に使用することを指定します。

引用元: Python 標準ライブラリ » 書式指定ミニ言語仕様

投稿2018/11/18 09:28

編集2018/11/18 09:30
LouiS0616

総合スコア35658

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hood

2018/11/18 09:38

回答ありがとうございます。なるほど、そんなオプションがあったのですね・・・ とても勉強になりました!
guest

0

参考情報

https://note.nkmk.me/python-format-zero-hex/

...
デフォルトでは負の数にのみ符号(マイナス-)が表示される。

書式化指定文字列に+をつけると正の数にも符号(プラス+)が表示される。スペースをつけると正の数の先頭に一文字分のスペースが表示され、負の数と桁数が揃う。

print('sign: {: }'.format(100))
print('sign: {: }'.format(-100))
# sign: 100
# sign: -100
...

投稿2018/11/18 12:28

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問