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

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

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

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

Q&A

解決済

2回答

959閲覧

Python3でのfor分とwhile分の組み合わせ

nekko3

総合スコア3

Python 3.x

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

0グッド

0クリップ

投稿2019/08/14 03:56

編集2019/08/14 06:11

pythonを勉強中です。プログラム自体はじめてなのでいろいろ調べながら勉強していますが、
下記について調べ方が悪いのか、原因を追えなかったためため質問させてください。

やりたいこと

inputで数字を受け取り変数a/bに格納し、辞書(dict)のキーから、
変数a/bの範囲を変数varの回数分、掛け合わせる処理をしたいと考えております。
変数a/bが2/4、var3の場合、辞書のキーが2~4のものを3回ずつ(三周)取り出し、掛け合わせるイメージです。

whileループに入れていないようにも思えますので、そもそもの部分で
大勘違いをしているのかもしれない、とは思いつつ…
ご教示いただけますと大変助かります。よろしくお願いいたします。

問題点

for文の中で、while文を実行させられない(whileループに入っていないように見える)

記述内容

dict = {0:0, 1:0, 2:2, 3:4, 4:6, 5:8, 6:10, 7:12, 8:14, 9:16, 10:18} a, b = 2, 6 # 実際はinputで受け取ります var = 5 for i in range(a, b):   num = 0 while num == var: k += dict[i] num += 1 print(k)

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

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

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

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

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

can110

2019/08/14 04:02

コードはコードブロック```で囲んでください。 また、そもそも何が問題なのか分かるように、理想の動作と現状の(問題のある)動作結果を提示ください。
y_waiwai

2019/08/14 04:17

このままではコードが読めません。 質問を編集し、<code>ボタン、出てくる’’’の枠の中にコードを貼り付けてください
meg_

2019/08/14 05:54

上記コードは動かしてみましたか? 実行 → エラーまたは想定外の結果 → 修正 → 実行 ・・・ と繰り返してみてください。
nekko3

2019/08/14 06:19

can110さん y_waiwaiさん ご指摘ありがとうございます。修正しました。 meg_さん IDLE上で試してみましたが、動かなかったので調べながらトライしてみたものの改善せず、という状態でした。 (その調べる過程でこのサイトの類似質問をみて、質問することを思い立ちました)
guest

回答2

0

「for文の中で、while文を実行させられない(whileループに入っていないように見える)」とのことですが、下記で var=5、num=0 としていますので 0=5 ではないため whileループ内の処理は1回も実行されません。

Python

1var = 5 2for i in range(a, b): 3  num = 0 4 5 while num == var: 6 k += dict[i] 7 num += 1

投稿2019/08/14 06:30

meg_

総合スコア10580

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

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

nekko3

2019/08/15 04:29

meg_さん そもそも基本的なことがわかっていなくて申し訳ありません。 条件式が=ーで、等しくなったらループを抜けてくれるのかなと思いこんでいましたが、逆なのですね。 この場合、var回数分処理を繰り返すためにはどのようなコードにする必要があるのでしょうか? 教えていただけますとありがたいです。申し訳ありません。。
meg_

2019/08/15 05:06

for文で良いと思います。既に「for」も「range」も使用されているのでご存じかとは思いますが、「for j in range(var):」で良いかと。
nekko3

2019/08/15 09:08

恥ずかしながら別途yamap_55さんに示していただいたコードを見るまでrangeの引数が一つで良いと知りませんでした…!てっきり引数を2つとり、その範囲で動作するもの、と思い込んでしまっておりました ありがとうございます。
guest

0

ベストアンサー

仕様があっているのか自信ないですが、下記のコードでどうでしょうか?

python

1dict = {0:0, 1:0, 2:2, 3:4, 4:6, 5:8, 6:10, 7:12, 8:14, 9:16, 10:18} 2 3a = 2 4b = 6 # 実際はinputで受け取ります 5var = 5 6k = 0 7for j in range(var): 8 for i in range(a, b+1): 9# print(dict[i]) 10 k += dict[i] 11 12print(k)

※「変数a/bが2/4」の場合「辞書のキーが2~4」という事で、2も4も含むとしています。
※「掛け合わせる」となっていましたが、提示頂いたコードだと「k += dict[i]」となっていたので、そのまま足し合わせています。(2,4,6,8,10を5回加算している)

投稿2019/08/14 04:28

yamap55

総合スコア1376

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

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

nekko3

2019/08/15 04:26

yamap_55さん 掛け合わせるの件、申し訳ありません。おっしゃるとおり加算が正しいです。 頂いたコードで想定どおりの動きをしておりました。ありがとうございます。 質問なのですが、「 for i in range(a, b+1):」ですが、ここでb+1となっている理由を教えていただけませんでしょうか 初歩的すぎる質問のような気はしていますが理由がわかりませんでした。。
yamap55

2019/08/16 01:01

試してみればわかるかと思いますが、range(a, b)の場合、range(2, 4)となり、2と3としてループされる事になります。(4は含まれない。)よって、4を含ませるためにb+1つまり、4+1であり5、range(2,5)として2,3,4をループさせております。
nekko3

2019/08/16 04:46

失礼いたしました。内容承知しました。 何度も教えていただきありがとうございます。とても助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問