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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

292閲覧

Pythonにおいてstr型*int型と書いた時、何故str型としてint型の数値分表示されるのかの理論的な答えと、公式文章における記述の有無。

rea_mizumo

総合スコア1

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/06/21 09:48

編集2021/06/22 00:59

前提・実現したいこと

「何故、こうなるのか教えて欲しい。また、公式ドキュメント等に以下の記述についてあるか教えて欲しい」と言われました。正直回答に困っていますので、お力を借りられればと思います。

発生している問題・エラーメッセージ

該当のソースコード

Python

1s = "abc" 2print(s * 3) 3>>>abcabcabc

試したこと

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

補足情報ではなく、個人の見解についてを述べます。(すみません……)
私としましては、「例えば、"23"は"2+2+2"と同等なので、"s3"も"s+s+s"と同等、かつ"s+s"はstr型の連結と見なせるので、上記のような結果が出るのでは?」と思っているのですが、確証はありませんので、他の方の(子供にも分かり易い)解釈解説をお尋ねしたく質問致しました。

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

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

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

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

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

YT0014

2021/06/21 10:07

ご提示のコードで、実際にこの出力になるのでしょうか? print( s * 3)なら、理解できるのですが。
rea_mizumo

2021/06/22 01:10 編集

あ、本当ですね。気付かなかったです。 お教えいただき、ありがとうございます。修正いたします。 正しくはおっしゃる通り、print(s * 3)ですね。
rea_mizumo

2021/06/22 01:15

ベストアンサーを、ppaulさんに致した事を報告いたします。 他の方も、大変参考になる回答をありがとうございました。 ただ、ベストアンサーは1つである事、人へ説明するにあたって分かり易そうという点から選出させていただきました。 また機会がありましたら、お力をお貸しいただければと思います。 まだプログラミングを初めて1月も経たない若輩者ですが、何卒よろしくお願いいたします。
guest

回答3

0

ベストアンサー

  • 「例えば、"23"は"2+2+2"と同等なので、"s3"も"s+s+s"と同等、かつ"s+s"はstr型の連結と見なせるので、上記のような結果が出るのでは?」と思っているのですが

残念ながらそうではありません。

「設計者(つまりグイドさん)がそう設計したから」、です。

公式ドキュメント 3.1.2. 文字列型 (string)では、「文字列は + 演算子で連結させる (くっつけて一つにする) ことができ、* 演算子で反復させることができます」に例が書かれています。

python

1>>> # 3 times 'un', followed by 'ium' 2>>> 3 * 'un' + 'ium' 3'unununium'

投稿2021/06/21 10:16

ppaul

総合スコア24670

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

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

ppaul

2021/06/21 10:21

もしも、「理論的な答え」が存在するなら、すべてのコンピュータ言語の仕様は同じになるはずですが、そうではないですね。言語の仕様は設計者がどう決めるかに依存しています。
rea_mizumo

2021/06/22 01:08

確かにその通りですね。 分かり易くお答えしていただき、ありがとうございます。 ドキュメントの読み込み不足も露見してお恥ずかしい限りですが、大変参考になりました。
guest

0

お書きの認識で合ってます。

公式リファレンスでは、下記の「共通のシーケンス演算」の表の中に*の説明があります。
組み込み型 — Python 3.9.4 ドキュメント

投稿2021/06/21 09:59

otn

総合スコア85901

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

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

rea_mizumo

2021/06/22 01:06

ありがとうございます。もう一度読み込んできます。
guest

0

公式じゃないですけど、『Python 文字列 繰り返し 連結』で検索すると、
文字列の連結と繰り返し(乗算)がヒットしました。

これによると、

文字列を指定した回数繰り返して新しい文字列として取得する方法です。 * 演算子を使用します。

とありますね。

多分、

Python

1str = "abc" + "あいう" + "アイウ"

が "abcあいうアイウ" という結果なので、+ でやると『単純連結』、

  • でやると、かけているので『繰り返し連結』となるんだと思いますよ。

もしかしたら公式にもあるかもしれない。(っていうか絶対にあるだろ……と思うが)

投稿2021/06/21 09:58

BeatStar

総合スコア4962

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

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

rea_mizumo

2021/06/22 01:10

回答いただき、ありがとうございます。 +と*の違いもまだまだ認識が甘かったようです。『繰り返し連結』でもう一度調べ直してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問