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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

646閲覧

引数を繋ぐときの , と + は同じルールが適応されるのか。 辞書からvalueを持ってくるときには、自動的に数値は文字列になるのか。が疑問になってしまいました。

gunmed

総合スコア55

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1グッド

0クリップ

投稿2019/01/17 04:24

編集2019/01/17 04:29

, と + を区別して使いこなしたい

質問としては、引数を繋ぐときの , と + は同じルールが適応されるのか。
辞書からvalueを持ってくるときには、自動的に数値は文字列になるのか。
という2点です。
内容が長いのでわかりやすいように質問をピックアップしましたので、以下を読んでいただき、回答いただけると非常に助かります。

まず以下のコードをエスケープシークエンスの練習として書いていました。

a = {'名前':'佐藤', '年齢': 35, '体重': 60, '身長': 170} print(a['名前'], 'さん(', a['年齢'], ')の' '\n' '身長は', a['身長'], 'cmです\n体重は', a['体重'], 'kgです', sep='')

すると

佐藤さん(35)の 身長は170cmです 体重は60kgです

としっかり表示されました。

しかし、ここでa['年齢']の部分ですが、この辞書の年齢のvalueは 35 という数値で文字列ではありません。
そうだとすると、'さん(' などの文字列とstr()なしに 35 は結合できないのでは?と疑問になってしましました。

というのも、 文字列を , でつなぐということは + で文字列を繋ぐと同じ原則が適応されると理解していました。(末尾に,sep=''を用いると全く同じように使えると同時に理解しています。)

そこで、文字列 + 数値 は 文字列 + str(数値)に直さなければならないと同じように考えると、
今回の辞書からもってきた年齢のvalueもstr()で文字列に直さなくてはいけないのでは?と思いました。

一応str()で囲んでみたコードも実行してみたら、同じ結果が得られました。

a = {'名前':'佐藤', '年齢': 35, '体重': 60, '身長': 170} print(a['名前'], 'さん(', str(a['年齢']), ')の' '\n' '身長は', a['身長'], 'cmです\n体重は', a['体重'], 'kgです', sep='')

以上から辞書からvalueを持ってくるときにはvalueが数値であっても文字列であっても、文字列の引数として働くのではと考えました。
しかし、a['名前']のvalueである'佐藤'を見ると'佐藤'ではなく佐藤と''を除いていることに気づき、最終的には
辞書からvalueを取り出すときは、文字列なら''の中身を、それ以外の数値などは数値を文字列に変換して引数とする
と自分の中で結論づけましたが、正しいかわかりません。

以上になります。
まだプログラミングを始めたばかりで用語の理解も不十分かもしれませんが、よろしくお願いします。
変な言い回しも、あれば、指摘していただけるとありがたいです。

補足情報(FW/ツールのバージョンなど)

mac 10.14.1
3step pythonという本

azuapricot👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

次の二つは全く異なります。

  • 文字列を結合したのちに出力
  • 間に空白を置かずに出力した結果、結合されているように見えるだけ

というのも、 文字列を , でつなぐということは + で文字列を繋ぐと同じ原則が適応されると理解していました。(末尾に,sep=''を用いると全く同じように使えると同時に理解しています。)

『文字列を , でつなぐ』という発想が誤りです。
あくまでprint関数に引数を複数渡す際、引数の区切りとして使っているだけです。


引数を繋ぐときの , と + は同じルールが適応されるのか。

関数の引数を渡す際、 , は構文の一部であり、演算子ですらありません。

辞書からvalueを持ってくるときには、自動的に数値は文字列になるのか。

なりません。type関数を使って確認してみてください。

投稿2019/01/17 04:31

編集2019/01/17 04:33
LouiS0616

総合スコア35660

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

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

gunmed

2019/01/17 04:42

回答ありがとうございます。 引数の区切りとして,があるだけで結合はしていないのですね。誤解してました。 type関数を利用してみました。確かにintとでました。 いろいろ勉強になりました。ありがとうございます。
guest

0

文字列を , でつなぐということは + で文字列を繋ぐと同じ原則が適応されると理解していました。

いえ、全く意味が違います。そもそも、,でつないでいるわけですらなく、それらは別々の引数としてprintに渡っています。

たまたまprint可変長の引数を取れて、それらを全てstr()と同様な形で文字列に変換して出力する関数だというだけです(リファレンス)。

投稿2019/01/17 04:29

編集2019/01/17 04:43
maisumakun

総合スコア145183

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

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

gunmed

2019/01/17 04:43

回答ありがとうございます。 printの関数の捉え方、とても参考になりました。 わかりやすい説明、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問