ちょっとした書き間違いで、正しくはprint(w)
と書きますと、Hello ,satou,suzuki,
がきちんと出力されます。
変数w
に、入力した文字列が格納されているので。→w += input() + ","
0
の出力理由は、最後にi
に格納された値だからです。
- 質問者様のforのコードを行った後、すぐに
print(i)
をすると、1
と出力されます。
- forを
range(5)
でした後、すぐにprint(i)
をすると、4
と出力されます。
- forが5周で、iの値が0→1→...→4でループ終了
i
をつかってエラーがおきてなんやかんやした後、print(i)
をすると、0
と出力されます。
- forの0回目でエラーが起きてストップしているので、
0
になる。
(コメント欄での質問を受けて追記)
for文の基本の理解
for 変数名 in リスト※:
についておさらいしましょう。
(※リストおよびリストのようなものも含まれます。)
for文はリストの最初から最後までを1つずつ順番に取得しながら、処理をしていく記述です。
そしてループごとに、そのループでのリストの現在値が変数の中に代入されます。
変数名には何を書いてもいいですが、分かりやすいものがいいでしょう。
例)
python
1names = ['Tanaka', 'Satoh', 'Suzuki']
2for name in names:
3 print(name)
4# 1回目のループ: name = 'Tanaka' が代入される
5# 2回目のループ: name = 'Satoh' が代入される
6# 3回目のループ: name = 'Suzuki' が代入される
7
8for i in range(3): # [0, 1, 2] として捉える
9 print(i)
10# 1回目のループ: i = 0 が代入される
11# 2回目のループ: i = 1 が代入される
12# 3回目のループ: i = 2 が代入される
i の意味がある場合😄
forの中の変数名には、happyやらyeahやらmoneyやらだいたい何を指定してもいいのですが、
- 変数の中身がなんなのか分かりやすい名前にすること。
- また、慣習的に決まった名付け方法があります。
たとえばご質問のi
はインデックス(index)のイニシャルです。
インデックス番号を処理の中で使いたい時にi
やidx
やindex
などとという変数名を付けられることが多いです。
例)
python
1def generateId(number):
2 ids = []
3 for i in range(number):
4 ids.append('id-' + str(i))
5 return ids
6generateId(5) # ['id-0', 'id-1', 'id-2', 'id-3', 'id-4']
引数に(5)
といれたので、i
の値が5ループ分(0から4まで)変わることを利用して、連番のID番号を生成する関数です。
このようにインデックス番号を処理に利用したい時にi
とかindex
とか書きます。
i の意味がない場合👎
質問者様のコードを例に出してみます。
python
1n = int(input())
2w = "Hello "
3
4for i in range(n):
5 w += input() + ","
6print(w)
このコードだとi
を処理の中で全く使っていません。
このような場合どうするかと言うと、何かしら変数名は書かないとエラーになってしまうので苦肉の策で、
変数は使用しないという意図を示すために慣例で_
という変数名をつけてやります。
これはpythonに変数を使わないという書き方が標準搭載されているわけではなく、ただたんに慣習的なものです。
print(_)
とすると、しっかり値が代入されているのが見えます。_
という変数名なので!
ということで上記の例だとfor _ in range(n):
と書いた方が親切です。