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

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

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

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

Q&A

解決済

1回答

913閲覧

繰り返し処理で使用する変数の利用方法がわかりません。

YumiSakura

総合スコア101

Python

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

0グッド

2クリップ

投稿2022/10/01 08:00

編集2022/10/01 08:37

実現したいこと

繰り返し処理で使用する変数の利用方法がわかりません。

前提

標準入力が

2 satou suzuki

として

n = int(input()) w = "Hello " for i in range(n): w += input() + "," print(i)

とすると、
Hello ,satou,suzuki,となるかと思っていたのですが
1と出力されました。

お願いしたいこと

rangen回(今回は2回)変数iに標準入力(satousuzuki)が代入されるので
print(i)Hello ,satou,suzuki,と出力されるかと思いましたが
なぜ数字が出力されたのかご教授願います。

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

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

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

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

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

meg_

2022/10/01 08:16

> 0と出力されました。 「1」ではありませんか?
quickquip

2022/10/01 08:22

標準入力が 2 satou suzuki として 方を疑うべきかと思います。実際にはどのように実行しているのかを質問を編集して書くべきでしょう。
YumiSakura

2022/10/01 08:37

出力の件、失礼しました!おっしゃる通り1でした。訂正します。
otn

2022/10/01 09:17

こういう間違いをすると言うことは、変数とその意味を把握できてないと言うことなので、 プログラミングに慣れるまでは、メモ帳でもExcelでもいいので、変数名とその意味(何に使うか)の表を作って、 その表を見ながらプログラミングしましょう。
guest

回答1

0

ベストアンサー

ちょっとした書き間違いで、正しくはprint(w)と書きますと、Hello ,satou,suzuki,がきちんと出力されます。
変数wに、入力した文字列が格納されているので。→w += input() + ","


0の出力理由は、最後にiに格納された値だからです。

  • 質問者様のforのコードを行った後、すぐにprint(i)をすると、1と出力されます。
    • forが2周で、iの値が0→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)のイニシャルです。
インデックス番号を処理の中で使いたい時にiidxindexなどとという変数名を付けられることが多いです。

例)

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):と書いた方が親切です。

投稿2022/10/01 08:10

編集2022/10/01 12:00
Cocode

総合スコア2314

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

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

YumiSakura

2022/10/01 08:58

とてもわかりやすい解説ありがとうございます!スッと入ってきました! 1点気になるところがございまして、変数 i に値が格納されるかと思いますが、出力する際この変数を使用することがあまりないかと思います。(今回のprint(i)のような) 今回のコードですと変数 i はどのような役割を果たしていると考えたら良いでしょうか?
Cocode

2022/10/01 09:27

回答の内容を更新しました!
TakaiY

2022/10/01 10:18

おせっかいですみません。ちょっと気になったので。 「今回のコードですと変数 i はどのような役割を果たしていると考えたら良いでしょうか?」 今回のコードでは、変数iは実際には使われていないので役割はありません。 pythonにはループ変数(この場合はiのこと)を伴わないループを作る機能が無いので、使わなくても、変数を指定する、このような書き方になります。 ループ変数が意味を持っていないことを明示したい場合変数によく「_」(アンダーバー)を使いますね。 for _ in range(10): (と言っても、実は_もただの変数なので言語としてそういう機能があるわけではなくて慣習ですが。)
Cocode

2022/10/01 10:23

確かに変数を使わない時は、使いませんという意図を示すため、慣習的に _ と書きますね!補足ありがとうございます。 そしておっしゃる通り、iや、他に例に出したhappyやらindexやらと同じで、_という変数名をつけているだけですね。
Cocode

2022/10/01 11:48

回答を編集しました。TakaiY様ありがとうございました。
YumiSakura

2022/10/01 12:53

Cocode様、TaKaiY様、とてもわかりやすい解説をありがとうございます。 正直下手な参考書を見るよりわかりやすかったです…!!! ありがとうございました!!
Cocode

2022/10/01 12:56

TaKaiY様の補足のおかげです😭 私がもともと書いていた追記の回答はなかなか意味のわからないものでした… お役に立てたよかったです。 TakaiY様、重ね重ねありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問