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

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

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

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

Q&A

解決済

3回答

1060閲覧

Python 練習問題で不明な点があります

lolo333

総合スコア4

Python

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

0グッド

0クリップ

投稿2020/07/29 14:51

編集2020/07/29 15:08

前提・実現したいこと

以下のPythonの問題について、解答において分からない箇所があります。
(インデックスの表記が出来ず、分かりづらいかと思いますが、ご容赦下さい。)

整数 int_size を引数として取り、 長さが int_size であるリスト ln を返す関数 construct_list を作成してください。 ただし、 ln の i 番目の要素は i とします(i は 0 以上 int_size-1 以下の整数)。

以下のセルの ... のところを書き換えて construct_list(int_size) を作成してください。
def construct_list(int_size):
...

上のセルで解答を作成した後、以下のセルを実行し、実行結果が True になることを確認してください。

print(construct_list(10) == [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

解答

lang

1def construct_list(int_size): 2 ln = int_size * [0] 3 for i in range(int_size): 4 ln[i] = i 5 return ln

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

解答二行目のln = int_size * [0]という命令が意図する内容が分かりません。 なぜこの命令は必要なのでしょうか?

試したこと

以下のように命令を出すと、print(construct_list(10) == [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
の実行結果がFalseになってしまいます。

lang

1def construct_list(int_size): 2 for i in range(int_size): 3 ln[i] = i 4 return ln

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

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

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

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

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

tiitoi

2020/07/29 14:55

インデントが崩れるので、質問はマークダウン記法を使ってください
lolo333

2020/07/29 15:08

修正しました。ありがとうございます。
guest

回答3

0

ベストアンサー

こんにちは.

python

1def construct_list(int_size): 2 for i in range(int_size): 3 ln[i] = i 4 return ln

こちらの答案ですが,惜しいと思います.
ポイントはlist型変数lnを定義できていない点でしょうか.
実際に実行するとNameError : name 'ln' is not defined(「ln」なんか知らんぞ!)と怒られます.
じゃあlnを先に定義すればいいのか,ということで次の例を見てみましょう.

python

1def construct_list(int_size): 2 ln = [] 3 for i in range(int_size): 4 ln[i] = i 5 return ln

これ,実行すると今度はIndexError : list assignment index out of rangeって言われると思います.
「インデックスが範囲外だよ」って意味です.
ln = []の次の行でprint(len(ln))するとわかるのですが,lnの要素数は0,つまり空のlistです.当たり前っちゃ当たり前ですけど,忘れがちですね.
for文の中では「1つめの要素を1にして,2つめの要素を2にして,,,」って定義してるんですが,そもそも空のlistに1つ目も2つ目も無いんで,こんなエラーが出ます.

だから解答のようにあらかじめln = int_size * [0]して,きちっと要素数を満たした配列を用意する必要があります.
ちなみに,listに要素を追加するappendメソッドを使う以下のコードでも同じ結果が得られるでしょう.

python

1def construct_list(int_size): 2 ln = [] 3 for i in range(int_size): 4 ln.append(i) 5 return ln

pythonでは特に変数型を宣言する必要はありませんが,だからこそ各変数に格納されている値と型を常に意識しておかないと思わぬバグの原因になります.


ちなみに,

以下のように命令を出すと、print(construct_list(10) == [0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

の実行結果がFalseになってしまいます。

construct_listにln(空のlist)がreturnされているから,と考えると理解できると思います.

投稿2020/07/30 01:31

編集2020/07/30 01:42
branch

総合スコア70

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

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

lolo333

2020/07/30 01:47

ありがとうございました。
guest

0

ln = int_size * [0]に関しては、配列int_sizeのすべての要素を0で初期化していると捉えられると思います。

投稿2020/07/30 00:12

crinoid

総合スコア26

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

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

0

対話モードで[0] * 10とかやってみるとわかるのですが、int_size * [0]で「長さがint_sizeで要素がすべて0のリスト」を作成しています。

投稿2020/07/29 15:11

Daregada

総合スコア11990

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問