![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) パーソナルXLSBのfuctionを呼び出すと「Functionが定義されていません」のエラーになる 2 2022/08/22 22:51
- その他(プログラミング・Web制作) pythonのmap、結果の利用は1度だけ? 5 2022/06/11 12:33
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP 記述のおかしいところを教えて下さい。 1 2023/02/03 11:25
- C言語・C++・C# C言語初心者です、、、お助けください 2 2023/03/14 20:08
- MySQL 複数DBテーブルからのデータ取得 3 2022/05/17 15:02
- MySQL my_itemsテーブルのIDにAUTO_INCREMENT を追加ができるかで 1 2023/01/03 09:09
- Visual Basic(VBA) VBAでのMATCH関数 3 2022/10/17 19:06
- 経済学 答えが二つ出て曖昧なので誰か時給教えていただけると幸いです。 ある財の市場における需要関数と供給関数 3 2022/11/15 23:10
- その他(お金・保険・資産運用) 至急!【Wolt】各メニューの価格設定の簡単な計算方法 3 2023/03/05 11:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
int(input("○○"))の使い方
-
【至急!!!】python言語で本を見...
-
16進の10進変換について
-
pythonの*
-
パイソン文法で(インデント)
-
pythonで改行を含めてfindする方法
-
perでメールが送信出来ない場合...
-
if文で"指定の時間<time<指定の...
-
N88BASIC(98)の表示
-
<python>シンタックスエラーが...
-
<python>数字あてゲーム
-
m//gとm//gcの違い
-
Pythonでコンソールをクリアす...
-
文字のカラーとフォントの指定...
-
awkの正規表現での最左最短マッ...
-
favicon.ico
-
小数点付きの余分な桁を消すには
-
JSONで文字列が長い時
-
Application.ScreenUpdating = ...
-
formで特定のinputを送信しない...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
16進の10進変換について
-
【至急!!!】python言語で本を見...
-
pythonで演算子を変数に代入す...
-
数値かどうかの判定方法
-
pythonの*
-
UWSCのSELECT文の記述方法
-
int(input("○○"))の使い方
-
関数「exists」と「defined」の...
-
c言語 16進数の2進数への変換
-
Perlにおける<?phpinfo();?>の...
-
I2C接続のLCDディスプレイを使う
-
シェルスクリプトで、空白(ス...
-
「HSP」でキャラコードを使って...
-
switch文のエラーについて
-
Use of uninitialized value ---
-
変数の中は文字列か数値か調べ...
-
perでメールが送信出来ない場合...
-
画面上再読み込みをさせたいの...
-
awkの正規表現での最左最短マッ...
-
数値英単語変換
おすすめ情報
すみませんでした。
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(実際値)
ということでした。