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

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

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

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

Q&A

解決済

3回答

1718閲覧

Pythonの教本でヒット&ブローを作っているのですが、例に習って入力していると意味の分からない所が出てきてしまいました。

toshiaki104

総合スコア15

Python 3.x

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

0グッド

0クリップ

投稿2019/03/05 05:08

編集2019/03/05 05:54

ユーザーに4桁の数字を入力してもらい、「数字が4桁であること」「数字であること」を判断して、
もし該当しなければ繰り返し処理するというプログラムです。

isok = False while isok == False: b = input("ここに入力してください") if len(b)!=4: print("4桁を入力してください") else: kazuok = True for i range(4): if(b[i]<"0")or(b[i]>"9")   print("数字を入力してください")          kazuok = False    break if kazuok: isok = True print(b[0]) print(b[1]) print(b[2]) print(b[3])

例文には、↑のように書いてありました。

else以下の処理が理解出来ません。 ①「for i range(4): で i に [0]~[3]までを入れて繰り返し処理をします。 ② 数字でない場合は、print("数字を入力してください") と出力する。」 ③ 4桁だった場合は、else以下の処理をする。   **この先が分かりません。↓↓↓ 質問①「kazok = False」 のはどのような時に発動するのか? 質問②「break」は いつ発動するのか? 質問③ 何故 if文 なのに、条件式ではなく「kazok」という変数なのか? どこが理解出来ていなくて、この問題に躓いているのかが分かりません。 急に分からなくなってしまいました。 質問が少し分かりずらいかと思いますが、ご回答よろしくお願い致します。 追記 参考書籍「いちばんやさしいPython入門」 ページ数 P143

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

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

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

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

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

hayataka2049

2019/03/05 05:26

if(b)len!=4:とかインデントは間違っていると思うので、正確なコードに修正してください。
hayataka2049

2019/03/05 05:27

あと本の名前とページ数をを書いておいてください。
hayataka2049

2019/03/05 06:15

だいぶまともになりましたが、まだミスがあります。 for i range(4): # inが抜けてる if(b[i]<"0")or(b[i]>"9") # 行末のコロンが抜けている # あと全角スペースがいくつも混入している
guest

回答3

0

質問①「kazok = False」 のはどのような時に発動するのか?
質問②「break」は いつ発動するのか?

python

1(b[i]<"0")or(b[i]>"9")

という条件がTrueのときです。ただ、少し説明が要るでしょう。

pythonでは文字列(str型)を不等号で比較すると、Unicodeコードポイントに基づいた比較が行われます。文字にも数字が割り当てられているのですね。コード表を見た方がわかりやすいですが、0から9はコードポイントで隣接しており、これによって0,1,2,3,4,5,6,7,8,9のいずれかの文字かどうかを判定しています。

https://ja.wikipedia.org/wiki/Unicode%E4%B8%80%E8%A6%A7_0000-0FFF

質問③ 何故 if文 なのに、条件式ではなく「kazok」という変数なのか?

if文の条件のところには条件式でなくても書けます。変数に代入したTrue/Falseであっても構いません。たとえば、こんな感じです。

python

1>>> if True: 2... print("hoge") 3... 4hoge 5>>> h = True 6>>> if h: 7... print("hoge") 8... 9hoge

(実はpythonのオブジェクトはすべてTrue/Falseのどちらかに変換することができ、ifは勝手に変換してくれるのでこのどちらかである必要もありません。本筋から逸れるので説明しませんが)


条件周りだけ日本語で書いてみたコード(もどき)。

python

1while 正しい入力が来ない間: 2 b = input("ここに入力してください") 3 if len(b)!=4: 4 print("4桁を入力してください") 5 else: 6 とりあえず大丈夫だと仮定 7 for i in range(4): 8 if i番目の文字が数字を表す文字ではなかった: 9 print("数字を入力してください") 10 やっぱり大丈夫ではなかったので仮定を取り消し 11 break # それ以上見ても無意味なのでbreak 12 if 仮定が取り消されていなかったら: 13 正しい入力が来た

投稿2019/03/05 06:23

編集2019/03/05 06:34
hayataka2049

総合スコア30933

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

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

0

ベストアンサー

質問①「kazok = False」 のはどのような時に発動するのか?

以下のif文で、数字でない文字が入っていた場合に発動します。
if(b[i]<"0")or(b[i]>"9"): ←「コロン」忘れずに〜

後ろのif文(if kazuok:)に入らないようにするために使っているようです。

質問②「break」は いつ発動するのか?

for文の中で、数字出ない文字が入っていたときに発動するようです。

質問③ 何故 if文 なのに、条件式ではなく「kazok」という変数なのか?

kazok変数にブーリアン型(TrueかFalse)が入っているからです。
if文の条件式の箇所には、ブーリアン型を入れる方法もあります。
Trueならば、if文以下が実行されますし、
Falseならば、if文以下が実行されません。

タイプミスやインデントミス等を直すと、下記のようになると思います。ご参考までに。

isok = False while isok == False: b = input("input here: ") if len(b) != 4: print("input 4 degits") else: kazuok = True for i in range(4): if(b[i]<"0")or(b[i]>"9"): print("input digits") kazuok = False break if kazuok: isok = True print(b[0]) print(b[1]) print(b[2]) print(b[3])

【追記】
フロー図作ってみました。
流れ、参考にしてみてください。

イメージ説明

投稿2019/03/05 06:15

編集2019/03/05 09:12
aaaaakiyama

総合スコア29

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

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

toshiaki104

2019/03/05 07:02

とても分かりやすく説明して頂き、ありがとうございます。 kazuo = True for i range(4): if (b[i]<"0") or (b[i]>"9"): print("数字を入力してください") kazuok = False break if kazuok: isok = True この文の一番上に、kazuok = True と入っているのに、 数字ではない値を入力した事によって、 「kazuok = False」が発動し、 「kazuok」の値が、「False」に書き換えられて 「if kazuok:」の部分が「True」ではなくなる為、 最後の「isok = True」が発動しないという理解でよろしいでしょうか?
toshiaki104

2019/03/05 07:03

ごめんなさい。返信のコメント欄で打ちましたら、インデントが消えてしまいました。
aaaaakiyama

2019/03/05 08:59

その理解で正しいです。 「発動する」、という表現は、「実行される」という表現を使われると良いと個人的には思います〜 流れについて、フロー図を書いてみましたので、参考にしてください。
toshiaki104

2019/03/05 10:36

あっごめんなさい(笑)(泣) ちょっと表現方法が分からずに発動すると表現してしまいました。 そうですよね、「実行される」が良いですよね。 フロー図ありがとうございます。 ホントに助かります。ここまでして頂けるなんて本当に嬉しくて、感動しています。 本当にありがとうございます。勉強させていただきます。
aaaaakiyama

2019/03/05 21:59

^_^
guest

0

質問①「kazok = False」 のはどのような時に発動するのか?
質問②「break」は いつ発動するのか?

Python

1 if(b[i]<"0")or(b[i]>"9")

この条件に当てはまったときに実行されます。


質問③ 何故 if文 なのに、条件式ではなく「kazok」という変数なのか?

if文はTrueFalseで判断します。
条件式は結果的にTrueFalseになるだけで、if文は必ず条件式を必要とするわけではありません。
つまりはif文はTrueFalseを必要とするので、条件式でも成り立ちますし、
変数にTrueもしくはFalseが入っていても成り立ちます。
(ほぼ無意味ですがTrueFalseを直打ちしても成り立ちます)


どこが理解出来ていなくて、この問題に躓いているのかが分かりません。

プログラムを指でなぞって流れを確認するとか、
紙に各変数の値をメモしながら確認してみるとか、
頭だけでなく手も動かしてわからない場所を把握しましょう。

「ここはOK」「ここまではわかる」など声に出すのも案外理解の助けになったりします。

投稿2019/03/05 06:14

dice142

総合スコア5158

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

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

toshiaki104

2019/03/05 10:42

TrueかFalseの判断だったんですね。だから条件式があっても無くても、一緒てことなんですね。勉強になりました。 勉強の仕方のアドバイスもありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問