626件0先月からPython3の勉強を始めた初心者です。現在サイコロを振るプログラムを作っているのですが、その中でうまく動作の繰り返しを行うことができず悩んでいます。どんな文字を入力してもelse以下が3回繰り返されてしまいます。print("結果が出ます。continuefor以外にwhileで考えてはみたのですが、それらしきものはわかりませんでした。下りがおかしいのでしょうか。14:102そ、それはyesが3文字だから......。"yes":がやっているのはyesの先頭から一文字ずつdiceQに入れて反復処理してるだけです。入門の本を読んで、まとまった知識を得るのが近道かもしれません。14:36皆さん丁寧に答えてくださってくれてありがとうございます。公式チュートリアル、教本を確認してきます。"yes":の部分が少なくともおかしいと思います。この処理の意味は、"yes"を一文字ずつ処理するという意味です。diceQには、順に"y","e","s"と入れられ、ループに入るので、3回処理されるわけです。"y","e","s"は、どれも"yes"でもなく、"no"でもないので、3回、"yes"か"no"でこたえてくださいという処理に振り分けられてしまうのです。for文は、最初にどのようなシーケンスを定めるかで、処理の回数が決まってしまうと言っていいです。有限回数のループを行うという点が、while文と違います。そのため、無限ループという表現は、while文の説明でよくなされます。シーケンスとはシーケンスとは、要素を一つずつ取り出すことのできる連続したデータの事を言います。[1,2,3]などのリストや(1,2,3)のタプルはもちろん、"あいう"などの文字列もシーケンスとなります。他にもありますが、ここでは詳しく書きません。連続したデータと書きましたが、[1]だと動かないというわけではありません。ユーザーの入力によって、処理が終了するか、継続するかが問われていますから、while文によるのがいいでしょう。for文だと、ユーザーの意志ではなく、シーケンスがすべて取り出されるか否かで終了するか否かでユーザーの意志にかかわらず終了してしまうため、ユーザーの意志に処理の継続をかかわらせているこのコードとは、親和性が無いと思います。質問者様の意図に沿わない結果になりそうです。出来合いの物ですが、これを試してみてください。print("結果が出ます。#その都度、diceQを初期化`コードをここに入力`これだと、思ったような動作をされるのではないでしょうか?continue文continueはループ処理でループの最初に戻るということのようで、while文でもfor文でも使えるようです。私のコードより別解答の方のコードの方がcontinueを利用している美しい答案だと思います。random.randintの注意点それと、random.randintの使い方ですが、これは、最初に変数に入れてしまうと、もう、その最初に入れた変数で固定化してしまいます。ループにいれて、その都度変数に入れなおさないと、別々の数字ではなく、常に同じ数字が出てくることになります。よろしければ、random.randoint(1,6)をループの外に出して、処理の違いを確認してみてください。個の銅バッジ細かく説明してくださりありがたいです。Pythonについてもっと勉強しなおしてきます。yesとしてしまうと、diceQには、yとeとsが1回ずつ入ってしまいます。"yes"となり絶対に条件がTrueになりません。そのため、else節が3回実行されています。print("結果が出ます。個の銅バッジforについて大きな誤解をしていたようです。基本をしっかり勉強しなおします。わかりやすい説明ありがとうございます。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。