質問: 家計簿アプリで支出を入力するというところで`while True:`を置く場所でエラーがあると言われてしまいました。 defの中にdefを置けますか?? また、defの中にwhile文を置けますか?? 後、できたらインデントとかも教えてくれるとありがたいです。 最後にfirst()が反映されてないのは何故なんでしょうか?? 教えてもらえたら嬉しいです! よろしくお願いします。 ![![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/2c17732918af13dbfbfeafa8aee0a8c0.png)](1fec0933a798b47a0b76c8c2e997c83d.png) ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/fbcd2d010ceb3708101b885638e1ee1b.png) ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/daa7f7d610e40f891a5708cbc036ae59.png)
回答: > > defの中にdefを置けますか?? > > > 置けます。 > > また、defの中にwhile文を置けますか?? > > > 置けます。 ・・・が、defの中にdefを置いた場合、内側の関数にアクセスできる(使うことができる、という意味と捉えて構いません)のは通常は外側の関数の中だけです。外側の関数の外では使うことができません。 > > first()が反映されてない > > > どういう状況を指して言っているのかよくわかりませんが、このプログラム自体は33行目でput_secondを呼び出そうとした瞬間にエラーが出て落ちています。それまでにfirst()が呼び出される機会がないようなので、first()がいかなる結果をももたらさないのは当然です。