
def 消費税価格(price,tax=1.08):
return int(price*tax)
prices=[100,250,333,578]
for price in map(消費税価格,prices):
print(price)
実際値=list(map(消費税価格,prices))
print(実際値)
は結果で
108
270
359
624
[108, 270, 359, 624]
となるが
def 消費税価格(price,tax=1.08):
return int(price*tax)
prices=[100,250,333,578]
for price in map(消費税価格,prices):
print(price) ”←インデントを縮める
実際値=list(map(消費税価格,prices))
print(実際値)
とエラーになるのだが、このインデント
の間の取り方の構造はどういうふうになっているのか。ご教授ください。
No.1ベストアンサー
- 回答日時:
まず、ここの仕様で、半角スペースやタブを複数並べても、1つにまとめられてしまいます。
これは、Pythonに対しては致命的です。
今回、あなたの書いた2つの違いが、私にはわかりません。
「正常」な実行結果と「エラーになる」という実行結果から推測すると
def 消費税価格(price,tax=1.08):
□□return int(price*tax)
prices=[100,250,333,578]
for price in map(消費税価格,prices):
□□print(price)
実際値=list(map(消費税価格,prices))
print(実際値)
↓
for price in map(消費税価格,prices):
print(price) #←インデントを縮める
ということでしょうか?
#「インデントを縮める」場合でも
# for price in map(消費税価格,prices):
# □□print(price)
# ↓
# for price in map(消費税価格,prices):
# □print(price)
# だとエラーにならないはず
ご承知かと思いますが、Pythonでは、if,for等の対象となる「ブロック(1以上の文をまとめた処理の単位)」をインデントで表現します。
そのため、他言語に比べて厳しいルールがあります
○同一ブロック内では、同一のインデントにする。
○if,for等の 〜: の形をした文の場合、対象なるブロックは、〜:のインデントより1文字以上多くインデントさせなければならない。
○ブロックから抜けるときは、対応する元ブロックと同じ位置にインデントさせる。
正式な内容(の和訳)は次のところにあります。
https://docs.python.org/ja/3/reference/lexical_a …
https://docs.python.org/ja/3/reference/compound_ …
No.4
- 回答日時:
> このインデント
> の間の取り方の構造はどういうふうになっているのか。
まず正しくは、
for price in map(消費税価格, prices):
print(price)
と言うなります。
for文は繰り返しするべき内容は後続するブロックの内容になります。
この場合はprint(price)、つまり、priceを印字せよ、と言うのが文意になりますね。
従って、
for price in map(消費税価格, prices):
print(price)
と書けば、forが要求するブロックが存在しない、と言う事になります。
従って、上のように書くと
SyntaxError: expected an indented block
とエラーが起きるでしょう。
なお、
for price in map(消費税価格, prices):
print(price)
と言う書き方は無駄があって、今なら
[print(消費税価格(price)) for price in prices]
と書いた方が良い。
元々、mapもイテレータなんで、(Pythonに限らず)歴史的にはむしろ「forやwhileがメンド臭いんで使わないようにしたい」と言う欲求から作られたモノです。
つまり、本当なら、mapだけでこういう風に
map(lambda price: print(消費税価格(price)), prices)
書いて済ましちゃいたいようなトコなんですが、生憎、Pythonだとmapは単なる関数じゃなく、ホンマにイテレータとして実装されてるんで、これじゃあイテレータブルオブジェクトを返すだけで実行してくれません。
結果、for、あるいはlistの力を借りなければならなくなったりするんで、元々の生まれで考えると遠回りでメンドクサイ、本末転倒の実装になってるんですね。
で、上のような事を直接実行させたい場合、今やPythonでmapよりも使われているのがリスト内包表記と言う書き方です。
リスト内包表記:
https://note.nkmk.me/python-list-comprehension/
それで書けばmapで直接実行させたい、上のような書き方を、
[print(消費税価格(price)) for price in prices]
と書けば済むようになっています。
同じような考え方で、
実際値=list(map(消費税価格,prices))
ではなく、
実際値 = [消費税価格(price) for price in prices]
って書いた方がPythonっぽいでしょう。
# と言うか、本当なら順序としては、最初に
実際値 = [消費税価格(price) for price in prices]
を定義しておいて、
[print(i) for i in 実際値]
と後でプリントさせるべきだと思う。
No.3
- 回答日時:
それだと、インデントではエラーにならないはずですが。
具体的にどんなエラーメッセージが出るのですか?
例えば、Python3でインデントだとが不当だと
IndentationError: expected an indented block
のようなエラーメッセージが出ます。
まさかと思いますが....
「 ”←ここを縮めた場合 エラー」
が元のままなら
・最初の空白が全角スペースになっている。ここにそんな文字がくるのはおかしい
・" は文字列を囲むのに使う。コメントにはならない。
文字列だとしても、閉じる" が無いし、ここに文字列がくるのもおかしい
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba Replace関数について教えて...
-
CSSが全く分かりません、お助け...
-
CPUが16bitでも32bitOSでコンパ...
-
最初に聞かれたこと
-
DLLファイルの逆コンパイラにつ...
-
C言語 関数、変数の宣言について
-
C言語でファクト関数を使わずに...
-
あってる
-
DNCL(共テ用プログラミング言語...
-
バッチファイルで以下のような...
-
visual studio 2022でのC#プロ...
-
プログラミングc++を全く分か...
-
DNCL(共テ用プログラミング言語...
-
C言語 配列と関数の練習問題
-
gccを行ってもexeファイルが生...
-
c言語
-
VisualStudio2022でC言語プログ...
-
ストリームについて。
-
Cのオブジェクトファイルの逆ア...
-
Windows Formアプリからコンソ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
シェルスクリプトで、空白(ス...
-
16進の10進変換について
-
c言語 16進数の2進数への変換
-
I2C接続のLCDディスプレイを使う
-
【至急!!!】python言語で本を見...
-
関数「exists」と「defined」の...
-
パイソンのクラスについて
-
Pythonでコンソールをクリアす...
-
PythonのJanomeを使って品詞の...
-
至急、[python初心者] listを使...
-
Python3 プログラミング初心者...
-
Lispの、evalはどのようにすご...
-
コラボレイトリーとVSコード
-
Pythonでプログラミング プログ...
-
Python3
-
パイソン文法で
-
int(input("○○"))の使い方
-
プログラミングを教えて下さい
-
pythonを使ったプログラミング...
-
Adafruit LIS3DH 3軸加速度セン...
おすすめ情報
すみませんでした。
def 消費税価格(price,tax=1.08):
□□return int(price*tax)
prices=[100,250,333,578]
for price in map(消費税価格,prices):
□□print(price) ”←ここを縮めた場合 エラー
実際値=list(map(消費税価格,prices))
print(実際値)
ということでした。