

以下のように関数を定義して、n/kの商と余りを求めるコードを書きました。

[code]

    def quotient_and_remainder(n,k):
             quotient == n//k
             remainder == n%k
             print(quontient,remainder)
    
    quotient, remainder = quotient_and_remainder(10,3)
    print(quotient)
    print(remainder)
    
[/code]

エラーが"cannot unpack non-iterable NoneType object"と出てしまいうまく作動しません。

  * 定義した関数の返し方(printの部分)があっているか
  * `quotient, remainder = quotient_and_remainder(10,3)` で商と余りを別々に表示させる意図があるがこれであっているか
  * どこを修正すれば動くようになるか

について質問させてください。

よろしくお願いします。


CC BY-SA 4.0
2022-01-04T16:11:04.837
85489
2022-01-22T05:15:48.250
2022-01-22T05:15:48.250
3060
50759
question
python
定義した関数の使用時にエラー: cannot unpack non-iterable NoneType object


ちなみに前の質問もそうですが、割と初歩的な知識を習得していないように思われます。  
そうした場合、何か少し新しいことをするとつまづいて訳が分からず質問することの繰り返しになりがちです。

順を追っていけば一通りの知識が学べるような、何か適当な講座とかコースを探して学習してみることをお勧めします。

* * *

そして質問時の転記ミスでしょうか、typoらしいものが多数あるようなので見直してみてください。  
質問に記述された内容では、質問のエラーを再現させることはできません。

* * *

回答としては以下になります。

  * **定義した関数の返し方(printの部分)があっているか**

**print** は表示を行うものであり、関数の戻り値を指定するものではありません。  
関数の戻り値を定義するのは **return** です。

少し長いですが以下のリンク先の関数の定義の仕方についての説明を読んでください。  
その章の最後の方に戻り値の返し方が書いてあります。  
[4.7.
関数を定義する](https://docs.python.org/ja/3/tutorial/controlflow.html#defining-
functions)

return文単体の説明は以下になります。  
[7.6. return 文](https://docs.python.org/ja/3/reference/simple_stmts.html#the-
return-statement)

他の多くのプログラミング言語と同様に return
の後ろに即値や変数を書けば、それが戻り値(説明にあるように`式リスト`も戻り値にできます)となります。単に return だけ、あるいは return
無しなら、それは None を返したことになります。  
そして次の項目の答えの紹介先にあるように、カンマで区切って複数の値を並べれば、複数の戻り値を返したように見えます。(実際にはタプルとして1つにまとめた値(オブジェクト)を返しているわけですが)

  * ... **で商と余りを別々に表示させる意図があるがこれであっているか**

この部分は合っているでしょう。

複数の戻り値の返し方や、その受け取り方については、こちらの記事が参考になるでしょう。  
[Pythonの関数で複数の戻り値を返す方法](https://note.nkmk.me/python-function-return-multiple-
values/)

他にこんな記事も  
[Python関数の戻り値あり・なしの違いと複数定義する方法](https://www.self-study-
blog.com/dokugaku/python-funstion-return-none-multiple/)  
[【Python】関数の戻り値の書き方（複数）](https://pg-chain.com/python-function-return)

最後の紹介先にあるように、複数の戻り値が指定されている場合、結果を1つだけの変数で受けるか、指定された戻り値の数と同じ数だけの変数で受けるか、あるいは何も受けずに結果を無視するか、の3択になります。  
作ろうと意図していた戻り値の正しい返し方が実装されていれば、質問の使い方は合っています。

戻り値の返し方が間違っていた(そもそも返す指定をしていなかった)ので None
が1個だけ返ってきたところに受け側の変数が2個指定されていたので、エラーになったと考えられます。

  * **どこを修正すれば動くようになるか**

このような聞き方は「丸投げ」と言われるものに近くなるので避けた方が良いやり方です。  
質問の仕方・書き方を考慮した方が良いでしょう。  
具体的なコードは示しませんが、typoと戻り値の返し方を修正すれば動くでしょう。


CC BY-SA 4.0
2022-01-04T17:40:36.367
85490
2022-01-05T12:03:11.693
2022-01-05T12:03:11.693
26370
26370
85489
answer