
次のプログラムで
def say_hi(name, age = 80,address):
print("hi {0} ({1})({2})".format(name, age,address))
say_hi("tom", 23,"hatinohesi")
say_hi("bob",55,"akitasi")
say_hi("steve",90,"kuroisisi")
say_hi(age = 18, name = "rick",address="otarusi")
ではエラーになって結果が表示されないが
def say_hi(name, age = 80,address=""): #address="" とした
print("hi {0} ({1})({2})".format(name, age,address))
say_hi("tom", 23,"hatinohesi")
say_hi("bob",55,"akitasi")
say_hi("steve",90,"kuroisisi")
say_hi(age = 18, name = "rick",address="otarusi")
hi tom (23)(hatinohesi)
hi bob (55)(akitasi)
hi steve (90)(kuroisisi)
hi rick (18)(otarusi)
と表示されるのは何故なんでしょうか
また print("hi {0} ({1})({2})".format(name, age,address))の{0} ({1})({2})は
{0} {1}{2}ではどうしてだめなんでしょうか。
No.2ベストアンサー
- 回答日時:
> エラーになって
> だめなんでしょうか
質問するときは、具体的に書きましょう。
・エラーが出ているのなら、そのメッセージを読みましょう。
エラーになった理由はそこに書いてあります。
質問する場合は、コピペしましょう(個人情報等は編集しましょう)
・何が「だめ」なのかを書きましょう。
エラーになってしまう
と
思ってたのと違う
とでは対処方法が違います。
○エラー
マニュアルを読みましょう。
https://docs.python.org/ja/3.9/reference/compoun …
> 1 つ以上の 仮引数 が parameter = expression の形を取っているとき、関数は "デフォルト引数値" を持つと言います。
> ある引数がデフォルト値を持っている場合、それ以降 "*" が出てくるまでの引数は全てデフォルト値を持っていなければなりません
def say_hi(name, age = 80,address):
は age=80 の形を取っているので、「デフォルト値を持っている」ことになります。
そのため、age=80「以降 "*" が出てくるまでの引数は全てデフォルト値を持っていなければなりません」
ですが、 address はデフォルト値を持っていません。
よって、エラーになります。
○だめ
https://docs.python.org/ja/3.9/library/stdtypes. …
フォーマット文字列.format(対応する値,...(
という形で使われ、フォーマット文字列内の {0}{1}... 等は、それぞれ「対応する値の0番=1つめ」「対応する値の1番=2つめ」... に対応します。
それ以外の文字は、そのまま使われます。
print("hi {0} ({1})({2})".format("tom", 23,"hatinohesi"))
だと
hi tom (23)(hatinohesi)
と出力されます
print("hi {0} {1}{2}".format("tom", 23,"hatinohesi"))
だと
hi tom 23hatinohesi
と出力されます。
・Pythonとしてはどちらも「正しい」ものです。
・「hi tom 23hatinohesi」という出力が、あなたが欲しい結果でなければ{0} {1}{2}では「だめ」です。
No.4
- 回答日時:
>と表示されるのは何故なんでしょうか
書式文字列に忠実に出力されてるけど、
書式文字列の読み方を知りたいってこと?
>print("hi {0} ({1})({2})".format(name, age,address))の{0} ({1})({2})は
>{0} {1}{2}ではどうして駄目なんでしょうか?
何が駄目なのか解らない。
エラ―が起きるなら見えない不正な文字がソースに
紛れているのでしょう。
出力形式が気に入らないならどうしたいのか書こう。
年齢と住所を離したいなら {0} {1} {2} と適宜隙間を
入れればいい。
No.3
- 回答日時:
SyntaxError: non-default argument follows default argument
と出てた筈だよ。
「既定値のある引数の後ろに既定値のない引数がある。」
No.1
- 回答日時:
> エラーになって結果が表示されないが
少なくともどこでどういうエラーになってるかは確認しましょう。単にエラーで動きませんではどうしようもありません。
この場合はprint は全然関係なくて、ただ単に途中の引数だけに省略時引数を与えても駄目だと言う、それだけのことだと思いますよ。
print の括弧は、単に出力の形がどうなるかというだけの問題です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Application.ScreenUpdating = ...
-
pythonで実体参照文字を直す方法
-
[python] 文字列を変数名として...
-
エクセルVBA シート名の部分一...
-
VBAでPDFのコピーとリネームを...
-
「*:*」って何を意味するのでし...
-
FindFirst を複数条件で検索
-
JSONで文字列が長い時
-
c言語 16進数の2進数への変換
-
<SELECT>タグの折り返し
-
連結リストについて
-
【至急!!!】python言語で本を見...
-
文字のカラーとフォントの指定...
-
テーブル内でドロップダウンメ...
-
SELECT OPTIONの中身をコピペ...
-
pythonを使ったプログラミング...
-
シェルスクリプトで、空白(ス...
-
formで特定のinputを送信しない...
-
子windowsからsubmit()後にclos...
-
実行中の変数の中身をイミディ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Application.ScreenUpdating = ...
-
実行時エラー 3020の対策
-
FindFirst を複数条件で検索
-
[python] 文字列を変数名として...
-
ACCESS テキストボックスを隙...
-
vbaでxmlからNodeListでデータ...
-
VBAでPDFのコピーとリネームを...
-
コンボボックスのtag情報の取得...
-
「*:*」って何を意味するのでし...
-
構造体の各データの表示につい...
-
UWSC:ポップアップウインドウ...
-
MSXMLでの属性の存在確認法
-
【メモリ不足で落ちる(python)】
-
2つのpythonがあって、一方で...
-
構造体の変数の値を、動的に取...
-
VB6のLSETをVB2005で実現するに...
-
文字列配列をメンバにもつ構造...
-
VBAで特殊文字を出力したい
-
C++ APIについて エラーコード...
-
Perl テキスト 重複 個数
おすすめ情報