C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[14]: Pythonでのfor文による繰り返し


(過去ログ 163 を表示中)

[トピック内 15 記事 (1 - 15 表示)]  << 0 >>

■94400 / inTopicNo.1)  Pythonでのfor文による繰り返し
  
□投稿者/ るる (3回)-(2020/04/09(Thu) 23:17:33)

分類:[その他の言語] 

print("012")にて3回表示をしたいのですが、「SyntaxError: invalid character in identifier」が出ます。
どのようにすべきなのでしょう?


for i in range(0,2):
print("012")

else:
引用返信 編集キー/
■94401 / inTopicNo.2)  Re[1]: Pythonでのfor文による繰り返し
□投稿者/ Hongliang (988回)-(2020/04/09(Thu) 23:37:55)
2020/04/09(Thu) 23:39:09 編集(投稿者)

printの閉じ括弧が全角のものになっていますが…?

コードを書くときは、投稿時に「図表モード」を選ぶようにしてください。
特にPythonだとインデントが崩れて訳の分からないことになるので。
引用返信 編集キー/
■94403 / inTopicNo.3)  Re[2]: Pythonでのfor文による繰り返し
□投稿者/ るる (4回)-(2020/04/10(Fri) 00:28:59)
No94401 (Hongliang さん) に返信

for i in range(0,2):
print ("012")

else:


今度はこのようなエラーが出てしまいました。

    print ("012")
        ^
IndentationError: expected an indented block

引用返信 編集キー/
■94404 / inTopicNo.4)  Re[3]: Pythonでのfor文による繰り返し
□投稿者/ 魔界の仮面弁士 (2673回)-(2020/04/10(Fri) 01:21:00)
No94400 (るる さん) に返信
> print("012")にて3回表示をしたいのですが、
たとえばこんな感じで。
https://paiza.io/projects/srmVRvDYc4qfXjUvs4hFIA


No94403 (るる さん) に返信
> IndentationError: expected an indented block
エラーメッセージそのままですね。print の前に置かれるべき
インデント(行頭の空白字下げ)ブロックが漏れています。

あと、ループ後に特にやるべきことが無いのなら、else: 句は削除しましょう。
引用返信 編集キー/
■94405 / inTopicNo.5)  Re[4]: Pythonでのfor文による繰り返し
□投稿者/ るる (5回)-(2020/04/10(Fri) 09:37:32)
No94404 (魔界の仮面弁士 さん) に返信

> エラーメッセージそのままですね。print の前に置かれるべき
> インデント(行頭の空白字下げ)ブロックが漏れています。

まだ不慣れで申し訳ありません。


> あと、ループ後に特にやるべきことが無いのなら、else: 句は削除しましょう。

VBでのこのような場合には、どのように書けば良いのでしょう?

        For i = 0 To 2
            Print("012")
            'ここに他の作業もあります
        Next



引用返信 編集キー/
■94406 / inTopicNo.6)  Re[5]: Pythonでのfor文による繰り返し
□投稿者/ 魔界の仮面弁士 (2674回)-(2020/04/10(Fri) 10:11:32)
No94405 (るる さん) に返信
> まだ不慣れで申し訳ありません。

VB とは異なり、Python の文法では、
同じ数の空白でインデントされたまとまりを一つのブロックとして扱います。


> VBでのこのような場合には、どのように書けば良いのでしょう?

こんな感じで。

https://paiza.io/projects/hNsIdCcj7AlE6ZGmDKIKRw?language=python3
引用返信 編集キー/
■94407 / inTopicNo.7)  Re[6]: Pythonでのfor文による繰り返し
□投稿者/ るる (6回)-(2020/04/10(Fri) 10:25:27)
2020/04/10(Fri) 10:30:14 編集(投稿者)
No94406 (魔界の仮面弁士 さん) に返信

> こんな感じで。
> 
> https://paiza.io/projects/hNsIdCcj7AlE6ZGmDKIKRw?language=python3

最後の「print("終わり")」は必要がありませんので、
何故これでは駄目なのでしょう?

https://paiza.io/projects/XUNAl1mPgcn_nuz_kCBt_w?language=python3



引用返信 編集キー/
■94408 / inTopicNo.8)  Re[7]: Pythonでのfor文による繰り返し
□投稿者/ 魔界の仮面弁士 (2675回)-(2020/04/10(Fri) 10:41:27)
No94407 (るる さん) に返信
> 最後の「print("終わり")」は必要がありませんので、
> 何故これでは駄目なのでしょう?
> https://paiza.io/projects/XUNAl1mPgcn_nuz_kCBt_w?language=python3

その後に続くインデントブロックが何も無いからです。

VB でいえば、「End Select」や「Next」や「End Sub」、あるいはメソッド引数の閉じ括弧を
書き漏らしているような状態ですかね。


No94404 にも書いたはずですが、ループ後に特にやるべきことが無いのなら、else: 句は削除しましょう。
もしくは、「何もしない」ことを意味する pass 文を記述するようにします。



> unexpected EOF while parsing

EOF というのは End of File のこと。ファイルの終端です。


文法解析(parse)していったら、まだ処理が続くことを期待していたのに、
予期せぬ(unexpected)終端(EOF)にたどり着いてしまった、という意味のエラーメッセージです。
引用返信 編集キー/
■94411 / inTopicNo.9)  Re[8]: Pythonでのfor文による繰り返し
□投稿者/ るる (7回)-(2020/04/10(Fri) 12:23:50)
No94408 (魔界の仮面弁士 さん) に返信

> その後に続くインデントブロックが何も無いからです。

確かに何も無いのですが「Next」に代わるのが無いことには、ループをする範囲の設定すらも出来ませんからね。

> No94404 にも書いたはずですが、ループ後に特にやるべきことが無いのなら、else: 句は削除しましょう。
> もしくは、「何もしない」ことを意味する pass 文を記述するようにします。

ありがとうございました。
pass で上手く行きました。

解決済み
引用返信 編集キー/
■94412 / inTopicNo.10)  Re[9]: Pythonでのfor文による繰り返し
□投稿者/ 魔界の仮面弁士 (2676回)-(2020/04/10(Fri) 13:12:36)
No94411 (るる さん) に返信
>>その後に続くインデントブロックが何も無いからです。
> 確かに何も無いのですが「Next」に代わるのが無いことには、ループをする範囲の設定すらも出来ませんからね。

その範囲をインデントで表現する言語仕様なのですよ。

https://paiza.io/projects/tR041xkzVhb4YM8NiPXD9g?language=python3
解決済み
引用返信 編集キー/
■94418 / inTopicNo.11)  Re[10]: Pythonでのfor文による繰り返し
□投稿者/ るる (8回)-(2020/04/10(Fri) 18:50:47)
No94412 (魔界の仮面弁士 さん) に返信

> その範囲をインデントで表現する言語仕様なのですよ。

for文にまで、そのようなことがあるとは思いも因らぬことでした。

ところで、何故@、Aの箇所で
print(str(i) + '/DEF/' + str(j))
print(str(i) + '/GHI/' + str(j))
が実行されないのでしょう?

逆に言えば実行させるにはどのように書かば良いのか? もあります。

0/ABC
@
A
0/JKL
0/MNO
1/ABC
1/DEF/0
1/GHI/0
1/JKL
1/MNO

引用返信 編集キー/
■94419 / inTopicNo.12)  Re[11]: Pythonでのfor文による繰り返し
□投稿者/ 魔界の仮面弁士 (2678回)-(2020/04/10(Fri) 19:22:06)
No94418 (るる さん) に返信
>>その範囲をインデントで表現する言語仕様なのですよ。
> for文にまで、そのようなことがあるとは思いも因らぬことでした。

言語のリファレンスに目を通しましょうよ。

「プログラムは思った通りには動かない。書いたとおりに動く。」という格言があります。

まず、下記の点は理解されていますか?

print(-1 in range(3)) #False
print(0 in range(3)) #True
print(1 in range(3)) #True
print(2 in range(3)) #True
print(3 in range(3)) #False
print(4 in range(3)) #False


> ところで、何故@、Aの箇所で
> print(str(i) + '/DEF/' + str(j))
> print(str(i) + '/GHI/' + str(j))
> が実行されないのでしょう?

『range(3)』は、『range(0, 3, 1)』と同義です。0〜2 の 3 要素ですね。

『for i in range(0, 3, 1):』は、
C# で言えば「for (int i = 0; i < 3; ++i) { }」で
VB で言えば「For i As Integer = 0 To (3 - 1) Step 1」です。

『for i in range(3, 0, -1):』は、
C# で言えば「for (int i = 3; i > 0; --i) { }」で
VB で言えば「For i As Integer = 3 To (0 + 1) Step -1」です。



では問題。『for j in range(0, i):』というのは、
VB でいえば、以下のどの状態にあたると思いますか?

そして i が 0 の場合、そのループは何回走りますか?

(1) For j = 0 To i Step 1
(2) For j = 0 To i - 1 Step 1
(3) For j = 0 To i Step -1
(4) For j = 0 To i - 1 Step -1
引用返信 編集キー/
■94421 / inTopicNo.13)  Re[12]: Pythonでのfor文による繰り返し
□投稿者/ るる (9回)-(2020/04/10(Fri) 20:09:22)
No94419 (魔界の仮面弁士 さん) に返信

ダメダメ、もうシニアの頭ではついてけません。
しかも全くの素人の。

さて1回でしょうかね。
それと(2)。

違ってても今回の質問の主旨は果たせましたがね。
その意味でもホント感謝しかないです。


引用返信 編集キー/
■94422 / inTopicNo.14)  Re[13]: Pythonでのfor文による繰り返し
□投稿者/ 魔界の仮面弁士 (2679回)-(2020/04/10(Fri) 20:36:44)
No94421 (るる さん) に返信
> それと(2)。

はい、(2) で正解です。

Python の『for j in range(0, i):』は
VB の『For j = 0 To i - 1』にあたります。

実際には、『For Each j In Enumerable.Range(0, i)』の方がより近いですけれどね。


range 型の解説はこのあたりをご覧ください。
https://docs.python.org/ja/3/library/stdtypes.html?highlight=range#range


『range(3)』 は range(0, 3) や range(0, 3, 1) と同義です。これは 3 個の値「0」「1」「2」「3」になります。
『range(1)』 は range(0, 1) や range(0, 1, 1) と同義です。これは 1 個の値「0」になります。
『range(0)』 は range(0, 0) や range(0, 0, 1) と同義です。これは 0 個の値になります。


> さて1回でしょうかね。

いいえ、違います。ループ回数は 0 回です。
だから、@Aが実行されなかったのです。


『for j in range(i):』や『for j in range(0, i):』は
i 回のループを表します。

i が 3 なら 3 回のループですし、
i が 0 なら 0 回のループです。

VB の「For j = 0 To i - 1」も、ループ回数は i 回ですよね?


『list(range(3))』 は 「 [0, 1, 2] 」です。
『list(range(1))』 は 「 [0] 」です。
『list(range(0))』 は 「 [] 」です。

『list(range(2, 13, 3))』 は 「 [2, 5, 8, 11] 」です。


range に対して、正の添字でアクセスすると、先頭から n 個目の値が得られます。

『range(3)[0]』 は 「 0 」です。
『range(3)[1]』 は 「 1 」です。
『range(3)[2]』 は 「 2 」です。
『range(3)[3]』 は範囲外なので IndexError です。


range に対して、負の添字でアクセスすると、末尾から n 個目の値が得られます。

『range(3)[-1]』 は 「 2 」です。
『range(3)[-2]』 は 「 1 」です。
『range(3)[-3]』 は 「 0 」です。
『range(3)[-4]』 は範囲外なので IndexError です。
引用返信 編集キー/
■94434 / inTopicNo.15)  Re[14]: Pythonでのfor文による繰り返し
□投稿者/ るる (10回)-(2020/04/12(Sun) 12:00:11)
No94422 (魔界の仮面弁士 さん) に返信

分かる部分もあり分からない部分もあり。
少々頭を休めて実証してみることにします。

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

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -