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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

4回答

2488閲覧

円周率を小数点第 N 位まで出力したい

YumiSakura

総合スコア101

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/09/07 06:56

編集2022/09/07 06:57

実現したいこと

1 から 15 までの整数 n が入力されるので、円周率を小数点第 n 位まで出力したいです。

発生している問題・エラーメッセージ

a =3.141592653589793 print(format(a, '.2f'))

ですと3.14と出力されます。
しかし、

n = int(input()) a =3.141592653589793 print(format(a, '.nf'))

とすると

Traceback (most recent call last): File "Main.py", line 7, in <module> print(format(a, '.nf')) ValueError: Format specifier missing precision

とエラーが出ます。

お願いしたいこと

  • format関数の使い方が間違っている、いないか
  • 正しい書き方

を教えてください。

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

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

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

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

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

guest

回答4

0

n を文字列のまま扱えば、

Python

1n = input() 2a = 3.141592653589793 3print(format(a, '.'+ n + 'f'))

n が int なら str で文字列にする。

Python

1n = int(input()) 2a = 3.141592653589793 3print(format(a, '.'+ str(n) + 'f'))

投稿2022/09/07 07:10

kazuma-s

総合スコア8222

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

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

0

ベストアンサー

Logarithmさんの回答が正解だと思いますが、そもそもの質問の原因について書いてみます。

質問は、以下の上がよくて下がだめな理由ですよね?

python

1format(a, '.2f') 2format(a, '.nf')

これは、format()関数の使いかたの問題ではありません。
「文字列の中にある変数を、その変数が持つ値に書き換える」にはどうすればいいかということでしょう。
質問の例のように、単に変数名を文字列の中に入れても置き換えては貰えません。そんなことであれば、この例であれば、全ての文字列中の文字「n」が全て数字に置き換わってしまうことになります。

文字列の操作というのは、pythonに限らず、プログラミング言語の習得にあたっては重要なスキルの一つですので、これを機会に是非身に付けてください。
1つの方法は、kazuma-sさん の回答にあるように、文字列を結合して組み立てることです。
文字列の中に特殊な書式で変数を入れ込む方法もあります。 その1つが「f文字列」です。 先頭に「f」を付けた文字列の中に{}でくくって変数名を入れると、それが変数に置き換わるという物です。

今回の場合であれば

python

1format(a, f'.{n}f')

こうなります。
詳しい使いかたは「python f文字列」などで検索して調べてみてください。
他にも、文字列のformatメソッドを使う方法もあります。

投稿2022/09/07 09:17

編集2022/09/08 00:51
TakaiY

総合スコア14315

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

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

YumiSakura

2022/09/07 14:21

わかりやすいコメントありがとうございました!
TakaiY

2022/09/08 00:54

読み返したら、失礼な感じだったので修正しました。 お気を悪くされていたらすみません。
guest

0

切り上げしたい --> round関数を使う
切り捨てしたい --> math.floor関数を使う

python

1import math 2 3n = int(input()) 4a =3.141592653589793 5#切り上げ 6print(round(a, n)) 7#切り捨て 8print(math.floor(a*(10**n))/(10**n))

投稿2022/09/07 07:02

編集2022/09/07 07:12
Logarithm

総合スコア80

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

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

退会済みユーザー

退会済みユーザー

2022/09/07 10:24

roundは切り上げではなく丸めでは?
guest

0

f-stringで書けます。

Python

1 print(f'{a:.{n}f}')

投稿2022/09/07 09:55

LouiS0616

総合スコア35676

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問