電子書籍の厳選無料作品が豊富!

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(実際値)
とエラーになるのだが、このインデント
の間の取り方の構造はどういうふうになっているのか。ご教授ください。

質問者からの補足コメント

  • すみませんでした。
    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.2の回答に寄せられた補足コメントです。 補足日時:2021/04/17 07:37

A 回答 (5件)

まず、ここの仕様で、半角スペースやタブを複数並べても、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_ …
    • good
    • 0

「エラーになる」というなら何らかのメッセージが出ているはずだから, それをきちんと示すべきだろう.



ところで C・C++・C# とはどのような関係が?
    • good
    • 0

> このインデント


> の間の取り方の構造はどういうふうになっているのか。

まず正しくは、

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 実際値]

と後でプリントさせるべきだと思う。
    • good
    • 0

それだと、インデントではエラーにならないはずですが。


具体的にどんなエラーメッセージが出るのですか?

例えば、Python3でインデントだとが不当だと
IndentationError: expected an indented block
のようなエラーメッセージが出ます。



まさかと思いますが....
「 ”←ここを縮めた場合 エラー」
が元のままなら
・最初の空白が全角スペースになっている。ここにそんな文字がくるのはおかしい
・" は文字列を囲むのに使う。コメントにはならない。
文字列だとしても、閉じる" が無いし、ここに文字列がくるのもおかしい
    • good
    • 0

すべて右詰めになっているので、訳わかりません。


先頭のスペースを全角のスペースにしてから再投稿ください。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!