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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

4544閲覧

for とifの組み合わせによるネストについて

GuMasi

総合スコア73

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/07/03 23:13

あるコードを写経してみたのですがどうしてもわからず。。
変数VにTrueとFalseを代入し*とーを交互に出力させると言うコードみたいなのですが、6行目のV=にTrueを代入すると、どうして交互に出力されるのかと、また最後のprintの記述でコードが改行されるのも分かりません。
わかりやすく教えてくださると助かります。交互に出力されたコード

6行目のTrueの記述が無しの場合の実行

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

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

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

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

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

torisan

2019/07/04 00:08

厳しい言い方ですが、もう少し本などを読んで基礎を固めた方が良いかと思います。 プログラムがどういう順番で実行されていくか分かっていれば、理解できるレベルの話に見えます。
GuMasi

2019/07/04 05:27

そうですよね、理解力に乏しくてすみません。 あの〜もし差し支えなければtorisanのおすすめの本とかありましたら教えていただけないでしょうか?
torisan

2019/07/04 05:41

便宜上、本と言いましたが、私はこれ系の本はほとんど読んだことがありません。 この場合なら、『Python if』『Python for』などでサイト検索して、無理やり理解します。 おすすめの本に関する質問は定期的によく上がるのでそちらを参考にしてみては如何でしょうか。 https://teratail.com/search?q=Python+%E6%9C%AC ↑これも検索ワードは『Python 本』です。
GuMasi

2019/07/04 06:05

そうなのですね。 はい、分かりました。 色々教えてくださりありがとうございました。
guest

回答3

0

こういうので動きを追うと理解しやすいかと思います。

投稿2019/07/04 05:36

can110

総合スコア38252

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

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

GuMasi

2019/07/04 06:02

ありがとうございます。 とても良さそうですね。
guest

0

ベストアンサー

1. なぜ交互に出力されるか

  • あるとき if v is False:のブロック内に入ると、ブロック内の処理で必ずv=Trueに書き換えられます。
  • 次にif v is False:まで到達した際、先ほどv=Trueに書き換えたので、v is Falseは偽となり、elseの方の処理が実行されます。ここでv=Falseに書き換えられます。
  • あとは同じことの繰り返しです。

2. なぜ改行されるか

  • pythonでprint関数は通常、何も指定しなければ引数に渡した文字列等を出力して 改行 までやってくれます。
  • この動作は、言い換えれば引数に渡した文字列と、"\n"のような改行コードを一緒に出力していることに他なりません。
  • 一方、forループ内でのprint("*", end="")という記述のend=""の部分は、デフォルトでやってくれる改行("\n"の出力)の代わりに、別の文字を出力してくれ、という命令になります。
  • なので、forループ内では"*"や"-"を出力して、そのあとに""(空文字)を出力するようになっている、つまり改行をしないようになっています。
  • 一方print()end=を指定していないので、デフォルトの動作で改行を行います。

投稿2019/07/04 01:39

keitatomozawa

総合スコア81

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

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

GuMasi

2019/07/04 05:54

回答してくださりありがとうございます。 という事は6行目のV=Trueは代入だけの意味ではなくブロック内に入るとif文の評価とされると言う理解で大丈夫でしょうか? 2の なぜ改行されるのかについては なんとなく理解する事ができました。
keitatomozawa

2019/07/04 06:02

私の説明も下手で申し訳ないですが、ちょっと認識が異なります。 `V=True`は単なる代入です。 まず、`if V is False`と書いているので、ここに到達した際にVがFalseならprintとV=Trueが実行され VがTrueならelseの下にあるprintとV=Falseが実行されます。 なので、V is Falseの評価は、繰り返しの処理でその都度逆になるはずです。
GuMasi

2019/07/04 07:19

いえいえ私の方こそ理解力が乏しく申し訳ありません。 そうしますと5行目のprintで*が実行され、6行目のV=Trueの記述で4行目のif v is のvがTrueに書き換わりif v(True) is Falseとなるので、その後else文が実行されて”ー”が出力されその後一番下から2行目の V=Falseで、最初に記述したfor文に戻り同じ事を繰り返すという認識でよろしいでしょうか?
GuMasi

2019/07/04 07:24

よかったです〜。 分かりやすく教えてくださり助かりました。 ありがとうございました。
guest

0

if文の動作を追っていけば理解できると思いますが、、

  • v がFalseのとき

*を出力
v=True を実行

  • v がTrueのとき

ーを出力
v=False を実行

  • そして、ループ

という動作になりますね

んで、
print()
を実行したら、改行が出力されるということになってます

投稿2019/07/03 23:31

編集2019/07/03 23:34
y_waiwai

総合スコア87747

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

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

GuMasi

2019/07/04 05:17

回答していただきありがとうございます。 そうなのですね、ループと言う動作と言うのは、for文を記述してあるのでされるのですよね。
y_waiwai

2019/07/04 05:26

記述されてるfor文は双方とも、5回繰り返す、となっています 順番に文を追っていけば、なにをしてるのかわかってくると思いますよ
GuMasi

2019/07/04 06:00

ありがとうございます。 もう少し色々試行錯誤しながら考えてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問