質問のコツ

質問のコツを知っておく意味は?

質問のコツを知っておくと、質問するときだけでなく、何かを学ぶすべてのときに役立つからです。

質問する力があれば、自分自身が何を理解していて、何を理解できていないかを明確にできます。 理解できていない範囲が明確になるので、 自分にとってよりためになる情報を引き出せる ようになります。 たとえ誰かに質問をできない場合でも、 自分自身で疑問を明確にすると問題の解決が簡単 になります。

「なぜ質問する側が気を遣わないといけないの?」 と感じられるかもしれませんが、そうではありません。 ぜひ良い質問をすることで、効果的にプログラミングやPythonを学習しませんか?というご提案です。

質問することを通して、理解の範囲を明確にする力、疑問を伝える力を磨いてください。 必ずプログラミング、Pythonの学習に役立つでしょう。

質問のコツ1. 知りたいことを明確に

質問の中で一番知りたいことは何でしょうか? 疑問を書き出してみた後、その言葉を掘り下げて、より明確な表現にできるか考えてみましょう。

まずは、自分の知っている範囲を書き出すことをオススメします。 「どこまでは分かるけど、ここが分からない」と質問することで、自分の知りたいことに注力した回答が得られます。

改善前

if k in d:
    d[k] += 1
else:
    d[k] = 0

の意味がわかりません。

改善後の良い例

if k in d:
    d[k] += 1
else:
    d[k] = 0

の意味がわかりません。

d 辞書が集計している結果なのは分かります。
k 変数が、集計の対象("コーラ" のような文字列)なのも分かります。

if k in d とすると、どういう場合に if ~ の処理で、
どういう場合に else ~ の処理になるのかが分かりません。

質問のコツ2. 試したこと、試していないことを伝える

自分がすでに試していることを書きましょう。 すでに試して分かっていることを明確に伝えることで、自分がどこで迷っているのか、疑問を持っているのかを伝えられます。

プログラムが動かないときや試行錯誤したときには、その試してみたことを質問で伝えると良いでしょう。

また「試したこと、試していないこと」を考える中で、自分で試せそうなことがあれば確認しておきましょう。 自分で解決して学んだことは忘れにくいので、永遠の知識となります。

改善前

うまくできているのにテストが通りません

改善後の良い例

3問目でプログラムを実行したところ、期待した実行結果のとおりに表示されます。

Hello World

ですが、テストをすると AssertionError: list differ... とでます。

* print(row) という処理を main() 関数内の for 文に入れて実行、 row 変数を確認して問題ありませんでした
* 売上CSVファイルの読み込み結果 data 変数を print(data) として確認しましたが、問題ありませんでした

AssertionErrorが意味しているプログラムの間違いを教えてください。

質問のコツ3. 何を期待していたかを伝える

何か期待していた動作と違っていたり、判定が通らなかったり、疑問が湧いたりしたので質問すると思います。 質問を書くときに、その疑問や経緯、期待していたことを伝えると良いでしょう。

改善前

このプログラムがなぜか動きません

改善後の良い例

プログラムを「実行」すると「期待した実行結果」のように売上の集計結果が表示されるつもりでしたが、
何も表示されないままになってしまいます。
main() 関数には print 関数も書いているのですが、なぜ結果が表示されないのでしょうか。

質問のコツ4. プログラム、実行結果、エラー内容を伝える

プログラムがエラーになるときや、疑問なプログラムがある場合は質問内にプログラムを含めると良いでしょう。 単にエラー分を書いて質問するだけでなく、どのプログラムで、どう実行したときにエラーになるかを質問に含めるようにしましょう。

以下のようにMarkdownを書くことで、質問文中にプログラムを含められます。

def main():
    print("Hello Wold")

if __name__ == "__main__":

PyQ で学習中のエディターから質問した場合は、PyQのシステムが自動でプログラムや実行結果を質問に含んでくれます。 ですが、より細かな点を指定するためにも質問文内にもプログラムを含むと質問の意図が伝わりやすいです。

改善前

ifで判定しているプログラムが動きません

改善後の良い例

main() 関数内で数値の大小を判定している if 文でエラーが起こります。

if num < 5:

エラーは TypeError '<' not supported between instances of str and int となります。

質問のコツ5. Yes/Noで答えられる形式で聞く

質問するときに、疑問が明確であれば Yes か No で答えられる質問にしましょう。 もし「Yes」「No」だけの回答だけでなく深い意図や理由も知りたい場合は、併せて伝えると良いでしょう。

改善前

print関数で表示すると勝手に改行するのは何なんでしょうか

改善後の良い例

print関数で表示すると勝手に改行されるのはPythonの仕様ですか?
また、この挙動を変えることはできますか?

質問のコツ6. 名前を使う

「辞書」や「リスト」、「タプル」といったPythonの名前を積極的に使いましょう。 関数名を伝えるときも「 `range() 」のような明確な名前を使いましょう。

「タプル」のつもりで質問文に「 () の挙動を教えてください」と書いても、回答者にはタプルなのか、 関数のカッコ( range() ) なのか、計算式のカッコ( (1 + 3) * 5 )なのか見分けがつきません。

また、指示語を避けて明確な名前を使うと良いでしょう

  • 「エラー」、「よくわからないエラー」 = 「 ValueError 」、「 SyntaxError

  • 「関数の結果」 = 「 agg_log() 関数の結果 data 辞書」

改善前

{} のキーがリストでない値なのはなぜですか?

改善後の良い例

辞書のキーを .keys() で取得した結果、 dict_keys() という値が返ってきました。
リストが返ってくる想定でしたが、 ``dict_keys()`` はリストではないものですか?

例:

d = {"a": "A", "b": "B"}
print(d.keys())  # dict_keys(['a', 'b']) になる

質問のコツ7. 質問を分割する

複数の違う内容の質問の場合は、1つの質問の中で複数聞くのでなく、別々の質問として分けて聞きましょう。

質問や回答が長くなると読み難くなりますし、後日、回答を振り返るときにも探しにくくなってしまいます。

改善前

この calc_sales 関数の集計処理で、なぜ ret = [] と事前にリストを設定するのですか?
関連して、リストの append はなぜ何の値も返さないのですか?
その場合は結合したリストを作る(既存のリストに追加でなく)方法はありますか?

改善後の良い例

質問1つ目

- この calc_sales 関数の集計処理で、なぜ ``ret = []`` と事前にリストを設定するのですか?
質問2つ目

* リストの ``.append()`` が何の値も返さないのはPythonの仕様によるものですか?
* 結合したリストを作る(既存のリストに追加でなく)方法はありますか?

※質問は同じ質問に複数書かずに、1つずつ投稿ください。

質問のコツ8. コミュニケーションの気持ちで

質問と回答という関係も一つのコミュニケーションです。

質問する人も回答する人も常に完璧ではありませんので、認識が違うことや間違えることもあります。 そういったときは素直に伝えあうことをオススメします。

  • 理解できた場合は「理解できました」と伝えると良いでしょう

  • 納得出来ない場合は「〜の部分が理解できませんでした、〜ということでしょうか?」のように聞き返すことをオススメします

例えば質問やコメントの入力欄に、以下のように > 文章** と書くことで文章の引用ができます。

> 〜の部分で〜使って書くと集計の処理ができると思います。

考えてみましたが〜を使うというのが理解できませんでした。
集計で以下のようにループを書くということですか?
...

質問のコツを知っておくと、より多くの情報を学べるようになりますし、自分自身の問題解決にも役立ちます。 ぜひ、質問と回答を通して質問する力や回答する力を磨いてください。 質問が上手にできるというスキルは、何ものにも代えがたい一生の財産となります*

Python学習サポート対象外の項目

以下、Python学習サポートでサポート対象外の項目です。

  • anaconda、pyenvなどのサードパーティー製パッケージの環境設定

  • PyQで扱っていないサードパーティー製パッケージの使い方

  • Raspberry PiなどのIoT関連機器内のプログラム

  • アプリケーションの設計方法

    • 「実現したいことをどう作れば良いですか?」のような要件定義、設計が必要な質問

  • 個人やお客様の業務で書いたコードについてのデバッグやアドバイス

  • お客様の業務に関する相談

  • 将来の進路に関する相談

  • 他の学習サービス、書籍に関する質問

  • Python以外の内容(データベースの構築、JavaScriptの書き方、Excelの利用方法など)

その他、PyQ運営がサポートの範囲を超えると判断した場合、回答をお断りします。

疑問をPython一般的な内容として質問いただければ回答いたします

回答できる例:

  1. 「PyQのこのクエストの、以下のプログラムについて解説してください <以下、PyQのプログラムの引用>」

  2. 「文字列の右にある文字を除外する方法を教えてください」

  3. 「以下のfor文でなぜシンタックスエラーになるのですか?」

for i in range(10:
    print(i)

回答できない例:

  1. 「〜という本の〜ページにあるこのプログラムの意味を教えてください」

  2. 「このプログラムについて解説してください。<以下、本や他サービスのプログラムをそのまま引用>」

  3. 「Pythonに強いオススメの転職サイトを教えてください」

注意事項

当社はPython学習サポートで回答した内容を実行し、ユーザーが被った損害につき、一切の責任を負いません。業務で学んだ技術を利用される場合はご注意ください。

当コンテンツの知的財産権は株式会社ビープラウドに所属します。詳しくは利用規約をご確認ください。